スクロール中にCADisplayLink
が起動するかどうかは、実行ループに追加するモードによって異なります。おそらく、あなたはどこか、これを持っている:
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
のUIApplicationをscrollviewがスクロールされたときに含まれる「コントロールで追跡」の実行ループモード、UITrackingRunLoopMode
を追加します。その時点でrunloopはデフォルトモードから切り離され、ディスプレイリンク(デフォルトモードで追加されたタイマー、NSURLConnections
など)はデフォルトモードに復帰するまでは起動できません。
クイック修正:にコードを変更:
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
UITrackingRunLoopModeは、共通のモードの一つと考えられています。
時間をかけ過ぎるとUIKitが中断され、制御応答が非常に悪くなる可能性があるため、注意する必要があります。トピックから大量に分岐することになりますが、OpenGLはモーダルであり、特にスレッドに優しいわけではありませんが、EAGLSharegroupを使用して別のスレッドでレンダリングしてからメインスレッドにプッシュすることができます。 (2016)Swift3 ...
let d = CADisplayLink(target: self, selector: #selector(ThisClassName.updateAlpha))
d.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
//and then, for example...
func updateAlpha() {
let a = leader.layer.presentation()?.value(forKey: "opacity") as! CGFloat
follower.alpha = a
}
2016年に
例 - 。それは**それを思わcommonModes **は確かに典型的な近代的なiOSのためのソリューションです。参照してください:http://stackoverflow.com/a/4878182/294884これは5年間のQAはありませんがかなり信じられないです。 – Fattie