【问题标题】:Touch doesn't "stick" to view触摸不会“坚持”查看
【发布时间】:2012-11-19 15:19:15
【问题描述】:

我需要在 iPad 应用程序中旋转图像(例如顺时针)。图像保存在视图中:

UIImageView *view1 = [[UIImageView alloc] initWithFrame:CGRectMake(startX+lineWidth, startY+lineHeight, lineWidth, lineHeight)];
view1.tag = 0;
view1.image = [UIImage imageNamed:[images objectAtIndex:0]];

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event

我正在这样做:

CGPoint d1 = [touch locationInView:touch.view];
CGPoint d2 = [touch previousLocationInView:touch.view];               
CGFloat angle1 = atan2(d1.y, d1.x);
CGFloat angle2 = atan2(d2.y, d2.x);
subview.transform = CGAffineTransformRotate(subview.transform, angle2-angle1);

视图正在旋转,但它与触摸(或我的开发环境中的光标)一起运行并不顺畅。相反,它在触摸之前浮动了一点。

我错过了什么?

【问题讨论】:

    标签: iphone objective-c ipad ios6


    【解决方案1】:

    您为什么不为此使用 UIRotationGestureRecognizer(请参阅 Apple 文档中的 Event Handling Programming Guide)?

    它将使用标准的旋转手势(两根手指)来处理旋转,并直接提供您和角度,并且更易于使用。

    但是要直接回答您的问题,您的问题可能是您没有累积角度。您可以使用angle2-angle1 使用CGAffineTransformRotate 应用变换,这是当前触摸和前一次触摸之间的角度差。所以每次你移动你的手指,你改变你的subview的旋转一个角度,这个角度只是前一个点和当前点之间的差异,而不是触摸开始时的起点和当前点之间的差异。您应该将在touchesBegan:withEvent: 中检索到的点用于d2 而不是previousLocationInView:

    【讨论】:

    • 感谢 AliSoftware,但这两个都不起作用。我没有使用 UIRotationGestureRecognizer ,因为我需要它来进行单指触摸,当我使用从 touchesBegun 检索到的点进行 d2 时,旋转图像与光标完全脱节。
    • 好吧,如果没有更多信息,我也帮不上什么忙(例如,您确实记录了代码每次计算的点和角度以了解问题所在,对吧?)
    • 是的,我做到了。我会继续研究它,当我找到更多信息时,我会在这里报告。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2013-04-22
    • 2015-12-15
    • 2017-10-13
    • 2014-04-29
    • 1970-01-01
    相关资源
    最近更新 更多