【问题标题】:rearrange UIIviews based on gestures根据手势重新排列 UIIviews
【发布时间】:2012-12-01 23:18:46
【问题描述】:

我正在构建一个 iphone 应用程序,该应用程序在一个 UIViewController 中具有多个 UIViews 的 3x3 矩阵(总共 9 个 UIViews)。我试图找到一种方法让用户将一个视图移动到矩阵中的某个位置,然后相应地重新排列其余视图。想想当您将跳板上的应用程序拖到另一个地方时,所有其他图标都会相应地排列自己。

完成这样的事情的最佳方法是什么?

【问题讨论】:

  • 使用UIPanGestureRecognizer,使用translationInView 来调整您正在拖动的项目的坐标。当你放手时,你可以使用UIView类方法animateWithDuration来动画各种物品移动到它们的最终位置。

标签: iphone objective-c ios xcode uiview


【解决方案1】:

使用UIPanGestureRecognizer,使用translationInView 调整您正在拖动的项目的坐标。有关手势识别器的讨论,请参阅Event Handling Guide for iOS

当您放手时(即手势结束),您可以使用UIView 类方法animateWithDuration 动画各种项目移动到它们的最终位置。

因此,在viewDidLoad 中,您可能会执行以下操作(假设您将九个控件放在一个名为arrayOfViews 的数组中):

for (UIView *subview in self.arrayOfViews)
{
    UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self  
                                                                              action:@selector(movePiece:)];
    [subview addGestureRecognizer:gesture];
}

然后您的手势识别器处理程序可能如下所示:

- (void)movePiece:(UIPanGestureRecognizer *)gesture
{
    static CGPoint originalCenter;

    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        originalCenter = gesture.view.center;
    }
    else if (gesture.state == UIGestureRecognizerStateChanged)
    {
        CGPoint translation = [gesture translationInView:self.view];

        gesture.view.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y + translation.y);
    }
    else if (gesture.state == UIGestureRecognizerStateEnded)
    {
        [UIView animateWithDuration:0.25
                         animations:^{

            // move your views to their final resting places here
        }];
    }
}

这是拖动控件的基本结构。

【讨论】:

  • +1...知道将 UIView 拖到某个地方后如何知道它的位置吗?
  • 您可以查看视图的centerframe 属性。并且,预计您如何知道移动的九个视图中的哪一个的后续问题,我认为最简单的方法是在您创建它们时为九个视图中的每一个设置 tag 整数属性(或在 Interface Builder 中设置它们),为每个设置一个唯一的 tag 值。然后你可以看看gesture.view.tag,你就会知道你移动了哪一个。
【解决方案2】:

如果您正在为 iOS 6 进行开发,请务必查看 UICollectionView 类。如果你之前处理过表格视图,学习曲线应该不会太陡峭。您可以免费获得重新排列以及所有动画。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2021-12-26
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2021-05-19
    相关资源
    最近更新 更多