[英]Smooth move and pinch of 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);
}
关于如何使它更平滑有什么想法?
您可以使用UIScrollview进行此操作; 它直接内置在其中。
通过在手指之间跳跃,您是说无法区分第一根和第二根手指吗?
我要做的是计算手指之间的角度。 角度是指如果您以一个触摸为中心绘制一个圆,另一个在圆的边缘绘制一个圆,则可以确定第一次触摸上方的点与第二次触摸之间的角度。 如果两个事件之间的角度差大于0.5Pi(1/4圈),则可以假定触摸已切换,可以对此进行校正。
我希望你明白我的意思。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.