사용자가 이미지에서 2 가지 선택 항목을 선택할 수 있도록 구성 요소를 만들어야합니다. 처음에는 2 개의 이미지가 가운데에 "핸들"과 나란히 표시됩니다. 핸들을 왼쪽으로 움직이면 오른쪽 이미지가 더 많이 보이고 왼쪽 이미지는 적어지고 오른쪽 이미지가 보입니다. 그 반대의 경우도 마찬가지입니다.제스처에 대한 응답으로 UIImageview 마스크가 너무 느리게 업데이트됩니다.
기술적으로 2 개의 풀 사이즈가 있습니다. 팬 제스처가 있는데 사용자가 핸들을 슬라이드하면 핸들이 움직이고 마스크가 "새로운 중간"으로 조정되도록 업데이트됩니다.
이미지 마스크를 조정하는 코드는 다음과 같습니다. 상수는 제스처에 의해 호출되는 메서드에서 계산됩니다. 나는 "상수"와 마스크가 올바르게 업데이트되기 때문에 상수에 대한 계산이 잘된다는 것을 알고있다.
하지만
마스크는 너무 늦게 업데이트 및 드래그 할 때, 우리는 너무 늦게 조정되는 참조됩니다.
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()
}
이미지 뷰는 다음과 같이 자신의 마스크 설정이 있습니다
는maskA = CALayer()
maskB = CALayer()
choiceImageA.layer.mask = maskA
choiceImageA.layer.masksToBounds = true
choiceImageB.layer.mask = maskB
choiceImageB.layer.masksToBounds = true
그래서 요약하자면, 내 질문은 성능에 대해 정말이다. 이미지보기가 올바르게 조정되었지만 너무 느립니다. 제약 조건이있는 "핸들"은 정말 빨리 업데이트됩니다.