iOS:在视图中平移

iOS:在视图中平移,ios,cocoa-touch,uigesturerecognizer,pan,Ios,Cocoa Touch,Uigesturerecognizer,Pan,我设置了以下UIPangestureRecognitor: - (void)pan:(UIPanGestureRecognizer *)gesture { if ((gesture.state == UIGestureRecognizerStateChanged) || (gesture.state == UIGestureRecognizerStateEnded)) { CGPoint translation = [gesture translation

我设置了以下
UIPangestureRecognitor

- (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
要更新,因此(这只是我的头顶,未测试)如果您想在不使用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的情况下水平滚动,请尝试以下操作:

- (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(我推荐),请参阅以下教程之一:

我不明白您想做什么。你能澄清一下吗?我有一个自定义的UIView,视图所做的是绘制一个方程,比如sin(x)。我可以通过捏来缩放我的视图,我想做的是能够在视图周围移动,平移它,但不能在它的超级视图中移动整个视图,这就是现在发生在我身上的事情。我明白了。用UIScrollView包装一下怎么样?我想了想,但我正在学习斯坦福CS193P的iOS开发课程,到目前为止还没有提到,作业提示中也没有提到。所以我想还有另一种方法。引用:“我想做的是能够在视图中移动,平移它,但不能在超级视图中移动整个视图”,所以你只想水平滑动图形,而不能自由移动整个视图?平移意味着移动整个视图,就像Photos.app中的照片一样。那不是你想要的?我不明白你想做什么。你能澄清一下吗?我有一个自定义的UIView,视图所做的是绘制一个方程,比如sin(x)。我可以通过捏来缩放我的视图,我想做的是能够在视图周围移动,平移它,但不能在它的超级视图中移动整个视图,这就是现在发生在我身上的事情。我明白了。用UIScrollView包装一下怎么样?我想了想,但我正在学习斯坦福CS193P的iOS开发课程,到目前为止还没有提到,作业提示中也没有提到。所以我想还有另一种方法。引用:“我想做的是能够在视图中移动,平移它,但不能在超级视图中移动整个视图”,所以你只想水平滑动图形,而不能自由移动整个视图?平移意味着移动整个视图,就像Photos.app中的照片一样。那不是你想要的?