2011-04-13 2 views
2

현재 Apple에서 제공하는 핀치 제스추어 인식기를 사용하여 이미지 스케일을 만들 수 있지만 이미지의 최대 스케일을 어떻게 제한합니까?IOS에서 핀치 제스처로 이미지 스케일링을위한 최대 스케일 제한

Apple에서 크기를 1로 설정하고 이미지를 쉽게 확대 할 수 있도록 Apple에서 SimpleGestureRecognizers sample을 사용하고 있지만 제거 할 때 갑자기 점프가되어 멋지지 않습니다. 그러나 그때는 항상 1로 설정되어 있기 때문에 규모를 추적하기가 어렵습니다.

감사합니다. sender (UIPinchGestureRecognizer)의 scale 재산 당신이 확장 할 미만의 경우, 이미지를 다른 청춘에 확장 적용에 대한 gestureRecognizer 검사의 선택 방법에

답변

7

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; 
    } 
} 

합니다.

+0

여기서 imageView는 .scale 속성을 지원하지 않습니다. 이 오류에 대한 대안은 무엇입니까? – Hemang

+1

@Hemang : 위의 세 번째 단락을 확인하십시오. 'imageView.scale'은 규모의 누적 변화를 추적하기 위해 UIImageView 서브 클래스에서 생성 한 인스턴스 변수를 참조합니다. 또는,보기 컨트롤러에서 그런 인스턴스 변수를 생성 한 다음, 'self.imageViewScale'으로 참조 할 수 있습니다. 어느 쪽이든, 규모의 누적 변화를 추적하기 위해서는 새로운 변수가 필요합니다. –

+0

도움 주셔서 감사합니다. 나는 3 단락의 그 부분을 읽는 것을 놓쳤다. 그래서 나는 실수를했다. 감사. 코드가 정상적으로 작동합니다. – Hemang

0

. 예를 들어, 다음의 메소드는 pinchGesture에 대해 selector입니다.

-(void)pinchAction:(UIPinchGestureRecognizer *)sender 
{ 
    if(sender.scale<yourScaleLimit) 
    { 
    //scale up the image 
    } 

} 

감사합니다,

+0

스케일은 두 개의 pinchAction 호출 사이의 상대 값이며 각 pinchAction 호출 후에 1로 설정됩니다. 따라서 원점 뷰 - 크기와 현재 뷰 - 크기의 절대 관계가 아닙니다. – Seega

관련 문제