1

我有以下UIPanGestureRecognizer设置:

- (void)pan:(UIPanGestureRecognizer *)gesture {
    if ((gesture.state == UIGestureRecognizerStateChanged) ||
        (gesture.state == UIGestureRecognizerStateEnded)) {
        CGPoint translation = [gesture translationInView:self.superview];
        gesture.view.center = CGPointMake(gesture.view.center.x + translation.x, gesture.view.center.y + translation.y);
        [gesture setTranslation:CGPointZero inView:self.superview];
    }
}

我想在视图中平移,在同一视图中将一个位置移动到另一个位置。这是在移动视图,我该如何修改它来做我想做的事情?

更新:这就是我的方法最终正确平移的方式

- (void)pan:(UIPanGestureRecognizer *)gesture {
    if ((gesture.state == UIGestureRecognizerStateChanged) ||
        (gesture.state == UIGestureRecognizerStateEnded)) {
        CGPoint translation = [gesture translationInView:self];;
        self.origin = CGPointMake(self.origin.x + translation.x, self.origin.y + translation.y);
        [gesture setTranslation:CGPointZero inView:self];
    } 
}

origin在我看来是一个属性,它只是标记了我的图表中心的位置。在其 setter 方法中,setNeedsDisplay每当更改此值时都会更新

4

1 回答 1

6

好的,所以(这只是我的想法,未经测试)如果你想在不使用 UIScrollView 的情况下水平滚动,试试这个:

- (void)pan:(UIPanGestureRecognizer *)gesture {
    if ((gesture.state == UIGestureRecognizerStateChanged) ||
        (gesture.state == UIGestureRecognizerStateEnded)) {
        CGPoint translation = [gesture translationInView:self.superview];
        gesture.view.center = CGPointMake(gesture.view.center.x + translation.x, gesture.view.center.y);
        [gesture setTranslation:CGPointZero inView:self.superview];
    }
}

你所做的就是省略+ translation.y.

如果您想使用 UIScrollView(我推荐),请参阅以下教程之一:网络上有什么好的 UIScrollView 教程吗?

于 2012-02-08T22:34:58.277 回答