通过触摸屏幕的任何部分将UIImageView从一个点移动到另一个点

时间:2015-06-15 03:01:23

标签: ios objective-c

我一直试图获得一个UIImageView *rocket, 从我在故事板中设置的原始位置。它甚至对其初始位置有限制。

当触摸或按住屏幕时,我希望火箭向下移动77个像素。一旦它被释放,它将回到原来的位置。

所有这些动作,我想有0.5秒的动画,以免看到它跳跃。

我希望我在这里有足够的信息。

1 个答案:

答案 0 :(得分:0)

您需要的部分有两个部分:用户操作和UI动画。

听起来你想使用UILongPressGestureRecognizer。听起来您还希望视图控制器内的整个视图能够响应长按。

UILongPressGestureRecognizer做类似的事情:

  1. 创建UILongPressGestureRecognizer并将其作为手势添加到视图控制器中的视图中。

  2. 创建一种方法,当有事情发生时,长按手势可以调用。我通常称之为viewControllerLongPressed:

  3. 将新方法添加到手势识别器中作为目标。

  4. moveRocketDownmoveRocketUp创建两种新方法。

  5. viewControllerLongPressed:内,检查发件人的状态。如果是UIGestureRecognizerStateBegan,则调用moveRocketDown。对UIGestureRecognizerStateEndedmoveRocketUp执行相同操作。

  6. 此时,您有一个手势识别器,可响应视图中任何位置的用户触摸(除非有其他手势识别器干扰视图)。

    现在,你只需要为火箭设置动画。

    如果您确切知道火箭每次开始动画的位置并且每次都结束动画,那么我建议为这两点创建常数。像_rocketStartCenter和_rocketEndCenter之类的东西。

    要为火箭制作动画,这种方法应该可行(我不是在电脑上检查,所以如果关闭则道歉):

    [UIView animateViewWithDuration:0.5f
                         animations:^{
                             _rocket.center = _rocketStartCenter;
                          }];
    

    我建议使用大约0.3-0.35秒的动画来制作动画,大多数iOS动画都在这个范围内。