使用CGAffineTransformMakeRotation我遇到了跳跃运动的问题。它似乎工作正常,直到我到达象限1和2的顶部。下面是我正在使用的代码和youtube链接,显示发生了什么。任何见解都会非常感激。
我的目标是在内部使用svg旋转UIWebView。由于我无法单独检测UIWebView上的触摸,因此我在其上放置了一个空白的UIImageView。这允许我检测触摸并防止弹出复制对话框。
http://www.youtube.com/watch?v=x_OmS0MPdEE&feature=youtu.be
- (void)touchesMoved: (NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
NSArray *allTouches = [touches allObjects];
CGPoint location = [[allTouches objectAtIndex:0] locationInView:self.view];
if(selected == 1) {
CGFloat rads = atan2f(location.y - (grid1.frame.size.height/2),location.x - (grid1.frame.size.width/2));
grid1.transform = grid1Btn.transform = CGAffineTransformMakeRotation(rads);
}
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
NSArray *allTouches = [touches allObjects];
CGPoint location = [[allTouches objectAtIndex:0] locationInView:self.view];
if(CGRectContainsPoint(grid1Btn.frame, location))
{
selected = 1;
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
selected = -1;
}
答案 0 :(得分:0)
急动是由触摸事件位置固有的不准确引起的。 位于足够靠近框架中心的触摸事件很可能偏向框架的对角相对象限,同时围绕框架的中心描绘圆形。 这会导致视频突然跳跃90度。 避免该问题的一种方法是在框架的中心附近引入死区。任何位于框架中心的给定半径内的触摸都不会触发重新计算的旋转。
希望这有帮助。
答案 1 :(得分:0)
您在计算中使用了一些frame.size.*
。请注意,这些值(与bounds.size.*
不同)受transform
影响。请改用grid1.center
。它也更合乎逻辑(你绕中心旋转)。
接下来你需要解决的是,当触摸开始时它不应该跳到新位置:)