3

我在 IB 中设置了 4 个 UIImageViews。我还有一个描述状态的 UILabel(如下面的代码所述)。我使用 touchesBegan、touchesMoved 和 touchesEnd 方法来捕获对象移动,如下所示:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch* aTouch = [touches anyObject];
    UIView* aView = [aTouch view];
    if (aView != self.view) {
        [self.view bringSubviewToFront:aView];
        self.statusLabel.text = @"You're Dragging...";
    }
}

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

    UITouch* aTouch = [touches anyObject];
    UIView* aView = [aTouch view];
    if (aView != self.view) {
        aView.center = [aTouch locationInView:self.view];
    }
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    self.statusLabel.text = @"At Ease";
}

问题是,在我移动(在模拟器中)其中一个 UIImageView 之后,它们“跳”回其在 IB 中设置的原始位置,而不是留在我放下它们的位置。

为什么会这样?如何在“touchesEnd”“捕获” UIImageView 的新位置并避免这种“跳跃”?

PS我注意到,如果我不更新“touchesEnd”处的标签,UIImageView 将保持在最后一个位置,直到我点击另一个 UIImageView;这是怎么回事?

4

2 回答 2

2

你的代码似乎是正确的..你只是在取消选中自动布局后尝试它......后来我发现作者自己发布了答案......所以,对不起这篇文章..

于 2013-03-19T06:42:33.633 回答
0

我取消选中 IB 中的“自动布局”复选框,它工作正常。这不是做到这一点的“最佳实践”......但它确实有效。

于 2013-03-19T05:12:37.000 回答