ユーザーが画像の2つの選択肢から選択できるようにするコンポーネントを作成する必要があります。最初は、2つの画像が中央に「ハンドル」が並んで表示されています。ハンドルを左に動かすと、右画像と右画像の両方が表示されます。UIImageviewのマスクがジェスチャーに応答して更新が遅すぎる
技術的には、私はフルサイズの2つのフルサイズを持っており、それらはマスクされています。私はパンのジェスチャーを持っており、ユーザーがハンドルをスライドさせると、ハンドルが動いて、マスクが "新しい中間"に合わせて自分自身を更新します。
画像マスクを調整するコードは次のとおりです。定数は、ジェスチャーによって呼び出されるメソッドで計算されます。私は "ハンドル"とマスクが正しく更新されるので、定数の計算が良いことが分かります。
しかし
マスクは手遅れに更新してドラッグするとき、我々はそれが手遅れに調整されて表示されます。おさらいに、私の質問は、パフォーマンスについて実際にあるので
maskA = CALayer()
maskB = CALayer()
choiceImageA.layer.mask = maskA
choiceImageA.layer.masksToBounds = true
choiceImageB.layer.mask = maskB
choiceImageB.layer.masksToBounds = true
:
func adjustImagesMasks(to constant: CGFloat) {
choiceImageA.mask?.willChangeValue(forKey: "frame")
choiceImageB.mask?.willChangeValue(forKey: "frame")
let separationPoint: CGFloat = self.frame.width/2.0 + constant
maskA.backgroundColor = UIColor.black.cgColor
maskA.frame = CGRect(origin: .zero, size: CGSize(width: separationPoint, height: self.frame.size.height))
maskB.backgroundColor = UIColor.black.cgColor
maskB.frame = CGRect(x: separationPoint, y: 0, width: self.frame.width - separationPoint, height: self.frame.size.height)
choiceImageA.mask?.didChangeValue(forKey: "frame")
choiceImageB.mask?.didChangeValue(forKey: "frame")
maskA.drawsAsynchronously = true
maskB.drawsAsynchronously = true
self.setNeedsDisplay()
maskA.setNeedsDisplay()
maskA.displayIfNeeded()
maskB.setNeedsDisplay()
maskB.displayIfNeeded()
}
画像ビューはこのように自分のマスクを設定しています。イメージビューは正しく調整されていますが、ゆっくりと表示されます。制約のある「ハンドル」は、すばやく更新されます。