【问题标题】:Always animate UIView to user's tap location始终将 UIView 动画到用户的点击位置
【发布时间】:2010-12-18 02:26:26
【问题描述】:

我有一个 UIView,我想将其动画到用户手指当前所在的位置。

因此,当触摸开始时,它必须动画到点击位置。

当触摸移动时,它必须将其目的地调整到新位置。

当触摸结束时,它必须完成动画到最后一个点击位置。

我尝试了几件事,但都没有成功。我尝试在touchesMoved 中使用beginsFromCurrentState 创建一个新动画,但这也不起作用。

【问题讨论】:

    标签: iphone objective-c cocoa-touch uiview core-animation


    【解决方案1】:

    您似乎使这有点复杂。如果您正在实施 touchesMoved,那么您需要拖动。如果你对点击更感兴趣,那么 touchesEnded 就是你想要实现它的地方。无论哪种方式,您只需要查看该位置并根据该位置更新您的 UIView 的中心。如果您将更改包装到 UIView 动画块中的中心值,它将在更新时动画到该位置。

    如果您使用的是 iOS 3.2 或更高版本,您可以使用手势识别器,这非常简单:

    // In viewDidLoad or some such
    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]
                             initWithTarget:self action:@selector(viewWasTapped:)];
    [[self view] addGestureRecognizer:tapRecognizer];
    

    然后声明你的动作选择器:

    - (void)viewWasTapped:(UITapGestureRecognizer*)recognizer
    {
      CGPoint location = [recognizer locationInView:[self view]];
      [UIView beginAnimations:nil context:NULL];
      [UIView setAnimationDuration:1.0f]; // take a second to animate
      [viewToMove setCenter:location];
      [UIView commitAnimations];
    }
    

    这将使视图从一个位置移动到另一个位置。这称为隐式动画。使用 CAKeyframeAnimation 或 CABasciAnimation 等核心动画类将是显式动画。

    【讨论】:

      【解决方案2】:

      需要更多详细信息。但您确定您使用的是来自适当视图(即不是您要移动的视图)的touchesBegantouchesMovedtouchesEnded?还要确保userInteractionEnabled = YES。尝试记录来自 touchesBegan 的触摸,以确保您收到触摸。

      或者您可能只想查看 Apples MoveMe https://developer.apple.com/library/ios/#samplecode/MoveMe/Introduction/Intro.html 的示例代码,他们已经为您解决了所有这些问题。

      【讨论】:

      • MoveMe 示例并不是我想要的。 MoveMe 显示一个可拖动的视图。我需要一个紧跟用户位置的视图。真的不一样。
      • 是的,touchesBegan 等方法都被调用了,问题是我不知道如何设置正确的动画以产生我想要的行为。
      • MoveMe和你想做的有什么区别?
      • MoveMe 需要拖动。我的不需要拖。无论您点击哪里,它都会跟随。
      猜你喜欢
      • 1970-01-01
      • 2011-12-08
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      相关资源
      最近更新 更多