2010-03-25 13 views
0

나는 움직일 수 있기를 원하고 늘리려 고 꼬집기를 원합니다. 모든 것이 작동하지만 핀치 동작을 시작할 때 다소 불안해합니다. 위치가 두 손가락 사이를왔다 갔다합니다.UIImageView의 매끄러운 이동 및 집기

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    startLocation = [[touches anyObject] locationInView:mouth_handle]; 
    if([touches count] == 2) { 
     NSArray *twoTouches = [touches allObjects]; 
     UITouch *first = [twoTouches objectAtIndex:0]; 
     UITouch *second = [twoTouches objectAtIndex:1]; 
     initialDistance = distanceBetweenPoints([first locationInView:mouth_handle],[second locationInView:mouth_handle]); 
    } 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGPoint pt = [[touches anyObject] locationInView:mouth_handle]; 

    CGRect frame = [mouth_handle frame]; 

    frame.origin.x += pt.x - startLocation.x; 
    frame.origin.y += pt.y - startLocation.y; 

    frame.origin.x = (frame.origin.x < 58) ? 58 : frame.origin.x; 
    frame.origin.x = (frame.origin.x > (260 - mouth_handle.frame.size.width)) ? (260 - mouth_handle.frame.size.width) : frame.origin.x; 
    frame.origin.y = (frame.origin.y < 300) ? 300 : frame.origin.y; 
    frame.origin.y = (frame.origin.y > 377) ? 377 : frame.origin.y; 

    if(frame.origin.x - prevDistanceX > 2 && frame.origin.x - prevDistanceX < -2) 
     frame.origin.x = prevDistanceX; 
    if(frame.origin.y - prevDistanceY > 2 && frame.origin.y - prevDistanceY < -2) 
     frame.origin.y = prevDistanceY; 

    prevDistanceX = frame.origin.x; 
    prevDistanceY = frame.origin.y; 

    CGFloat handleWidth = mouth_handle.frame.size.width; 

    if([touches count] == 2) { 
     NSArray *twoTouches = [touches allObjects]; 
     UITouch *first = [twoTouches objectAtIndex:0]; 
     UITouch *second = [twoTouches objectAtIndex:1]; 
     CGFloat currentDistance = distanceBetweenPoints([first locationInView:mouth_handle],[second locationInView:mouth_handle]); 

     handleWidth = mouth_handle.frame.size.width + (currentDistance - initialDistance); 
     handleWidth = (handleWidth < 60) ? 60 : handleWidth; 
     handleWidth = (handleWidth > 150) ? 150 : handleWidth; 
     if(initialDistance == 0) { 
      initialDistance = currentDistance; 
     } 

     initialDistance = currentDistance; 
    } 

    mouth_handle.frame = CGRectMake(frame.origin.x, frame.origin.y, handleWidth, 15); 
} 

더 부드럽게 만드는 방법에 대한 의견이 있으십니까?

+0

나는 이미지를 UIWebView에 집어 넣었고 핀치 확대/축소 기능을 재발 명하지 않아도되었다. –

+0

@ Felix 님의 말씀을 받아들이지 마십시오. 그건 분명히 webview가 무엇을위한 것이 아닙니다. UIScrollView를 탐색해야한다. –

+0

아래의 설명에서 언급했듯이 이미지의 너비를 수정하고 이미지의 일부만을 사용하기 때문에 UIScrollView를 사용하지 않습니다. UIScrollView를 사용하면 전체 이미지의 크기가 조정됩니다. UIScrollView를 사용하는 방법을 알고 있고 여기에도 목표를 달성하고 있습니까? – Jacob

답변

0

손가락 사이를 뛰어 넘으면 첫 번째 손가락과 두 번째 손가락을 구별 할 수 없다는 뜻입니까?

손가락 사이의 각도를 계산하는 것입니다. 각도 란 원 터치를 중심으로 원을 그리면 원의 가장자리에 다른 원을 그리면 첫 번째 터치 바로 위의 점과 두 번째 터치 사이의 각도를 결정할 수 있다는 뜻입니다. 두 이벤트 간의 각도 차이가 .5Pi (1/4 원)보다 큰 경우 터치가 전환 된 것으로 간주 할 수 있으며이를 수정할 수 있습니다.

내가 무슨 뜻인지 이해하시기 바랍니다.

0

UIScrollview를 사용하여이 작업을 수행 할 수 있습니다. 그것은 바로 그것에 내장되어 있습니다.

+0

이미지의 끝에는 두 개의 볼이있는 길고 좁은 부분이 있습니다. 나는 꼬집어 서 전체 이미지의 크기를 조정하고 싶지는 않습니다. 이미지의 너비를 늘리고 끝에 공을 왜곡하지 않고 이미지를 확대하고 싶습니다. 그래서 stretchableImageWithLeftCapWidth를 사용하고 있습니다. UIScrollView의 부드러움을 원하지만 전체 이미지의 크기를 조정하고 싶지는 않습니다. – Jacob

관련 문제