我在自定义UIView中创建了一个200x200的圆圈。我使用以下脚本在iPad上的屏幕上移动视图对象。
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self.view];
if([touch view] == newShape)
{
newShape.center = currentPoint;
}
[self.view setNeedsDisplay];
}
一切正常,我可以将圆圈移动到屏幕上的任何位置。但是,如果我没有触摸圆形物体上的死点,它会略微跳跃。通过阅读代码,这是非常明显的,因为newShape.center
被设置为触摸发生的任何地方,并最终快速捕捉到该位置。
我正在寻找一种移动物体而不会咬合到触摸位置的方法。我想我会使用xy坐标来实现这一点,但我不确定如何实现它。
谢谢!
答案 0 :(得分:2)
在.h文件中声明CGPoint prevPos;
。
我的观点是_rectView
。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self.view];
prevPos = currentPoint;
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self.view];
if([touch view] == _rectView)
{
float delX = currentPoint.x - prevPos.x;
float delY = currentPoint.y - prevPos.y;
CGPoint np = CGPointMake(_rectView.frame.origin.x+delX, _rectView.frame.origin.y+delY);
//_rect.center = np;
CGRect fr = _rectView.frame;
fr.origin = np;
_rectView.frame = fr;
}
//[self.view setNeedsDisplay];
prevPos = currentPoint;
}
使用上面的代码。你不会得到那种“跳跃”效果。
答案 1 :(得分:0)
一种显而易见的方法是在-touchesBegan:withEvent:
中存储形状中心的触摸偏移量,并在-touchesMoved:withEvent:
中应用偏移量。