UIKit은 (핀치.) 단일 사용자 제스처에 대한 당신의 선택 방법을 여러 번 호출 각 호출은 규모의 작은 증가 (또는 감소)를 나타냅니다. 메서드에 대한 각 호출을 처리하고 각각의 작은 증분에 따라 이미지의 크기를 조절하면 부드러운 애니메이션을 얻을 수 있습니다.
인식기의 눈금 속성을 사용하여 이미지를 수정합니다. 그런 다음 속성을 1.0으로 다시 설정하여 다음에 selector 메서드가 호출 될 때 scale 속성은 마지막 작은 증분 만 표시합니다. 새 작은 증분으로 이미지의 크기를 다시 조정하고 1.0으로 재설정합니다. 인식기의 눈금을 재설정하지 않고 이미지의 크기를 다시 조정하지 않으면 누적 된 변화로 인해 이미지의 크기가 조절되어 불안한 동작 (잘못된 크기 조정)이 발생합니다.
제스처 인식기의 눈금을 1로 재설정합니다. 눈금의 총 변화를 추적하려면 UIImageView 또는 ViewController에 대해 '눈금'이라고도하는 인스턴스 변수를 만들 수 있습니다. 실제로 drawRect에서 새 축척 변수를 사용하여 이미지를 그리는 경우 setter에서 setNeedsDisplay에 대한 호출 만 추가하면됩니다. 그러면 축척을 변경할 때 이미지를 다시 그리는 코드를 작성할 필요가 없습니다 .) 어떤 경우
, 다음 코드는 (하지만 새로운 규모 변수에, 강탈의 제한 검사를 통합하는) 당신의 선택 방법에 대한 작동합니다 :이 도움이 희망
- (void)pinch:(UIPinchGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateChanged ||
recognizer.state == UIGestureRecognizerStateEnded) {
if (imageView.scale < yourScaleLimit) {
imageView.scale *= recognizer.scale;
//any other code to scale up the image if
//just changing imageView.Scale is not enough
}
recognizer.scale = 1.0;
}
}
합니다.
여기서 imageView는 .scale 속성을 지원하지 않습니다. 이 오류에 대한 대안은 무엇입니까? – Hemang
@Hemang : 위의 세 번째 단락을 확인하십시오. 'imageView.scale'은 규모의 누적 변화를 추적하기 위해 UIImageView 서브 클래스에서 생성 한 인스턴스 변수를 참조합니다. 또는,보기 컨트롤러에서 그런 인스턴스 변수를 생성 한 다음, 'self.imageViewScale'으로 참조 할 수 있습니다. 어느 쪽이든, 규모의 누적 변화를 추적하기 위해서는 새로운 변수가 필요합니다. –
도움 주셔서 감사합니다. 나는 3 단락의 그 부분을 읽는 것을 놓쳤다. 그래서 나는 실수를했다. 감사. 코드가 정상적으로 작동합니다. – Hemang