我一直试图获得一个UIImageView *rocket
,
从我在故事板中设置的原始位置。它甚至对其初始位置有限制。
当触摸或按住屏幕时,我希望火箭向下移动77个像素。一旦它被释放,它将回到原来的位置。
所有这些动作,我想有0.5秒的动画,以免看到它跳跃。
我希望我在这里有足够的信息。
答案 0 :(得分:0)
您需要的部分有两个部分:用户操作和UI动画。
听起来你想使用UILongPressGestureRecognizer
。听起来您还希望视图控制器内的整个视图能够响应长按。
让UILongPressGestureRecognizer
做类似的事情:
创建UILongPressGestureRecognizer
并将其作为手势添加到视图控制器中的视图中。
创建一种方法,当有事情发生时,长按手势可以调用。我通常称之为viewControllerLongPressed:
。
将新方法添加到手势识别器中作为目标。
为moveRocketDown
和moveRocketUp
创建两种新方法。
在viewControllerLongPressed:
内,检查发件人的状态。如果是UIGestureRecognizerStateBegan
,则调用moveRocketDown
。对UIGestureRecognizerStateEnded
和moveRocketUp
执行相同操作。
此时,您有一个手势识别器,可响应视图中任何位置的用户触摸(除非有其他手势识别器干扰视图)。
现在,你只需要为火箭设置动画。
如果您确切知道火箭每次开始动画的位置并且每次都结束动画,那么我建议为这两点创建常数。像_rocketStartCenter和_rocketEndCenter之类的东西。
要为火箭制作动画,这种方法应该可行(我不是在电脑上检查,所以如果关闭则道歉):
[UIView animateViewWithDuration:0.5f
animations:^{
_rocket.center = _rocketStartCenter;
}];
我建议使用大约0.3-0.35秒的动画来制作动画,大多数iOS动画都在这个范围内。