![](/img/trans.png)
[英]Changing the point at which the one touching the screen by a superior point, using react
[英]Moving a UIImageView from one point to another by touching any part of the screen
我一直在尝试从我在故事板中设置的原始位置获取一个UIImageView *rocket
。 它甚至对其初始位置有限制。
当触摸或按住屏幕时,我希望火箭向下移动 77 个像素。 释放后,它会回到原来的位置。
所有这些动作,我希望有一个 0.5 秒的动画,以免看到它跳跃。
我希望我在这里有足够的信息。
您想要的有两个部分:用户操作和 UI 动画。
听起来您想使用UILongPressGestureRecognizer
。 听起来您还希望在您的视图控制器中拥有整个视图,以响应长按。
要使UILongPressGestureRecognizer
执行以下操作:
创建一个UILongPressGestureRecognizer
并将其作为手势添加到视图控制器中的视图中。
创建一个方法,当发生某些事情时,长按手势可以调用该方法。 我通常称之为viewControllerLongPressed:
类的东西。
将新方法作为目标添加到手势识别器中。
为moveRocketDown
和moveRocketUp
创建两个新方法。
在viewControllerLongPressed:
,检查发送者的状态。 如果是UIGestureRecognizerStateBegan
然后调用moveRocketDown
。 对UIGestureRecognizerStateEnded
和moveRocketUp
做同样的moveRocketUp
。
此时,您有一个手势识别器,可以响应用户在视图中任何位置的触摸(除非有其他手势识别器干扰视图)。
现在,您只需要为火箭设置动画。
如果您确切地知道火箭每次开始动画和结束动画的位置,那么我建议为这两个点创建常量。 类似于 _rocketStartCenter 和 _rocketEndCenter。
要为火箭设置动画,此方法应该有效(我不在电脑前检查,所以如果它关闭,我深表歉意):
[UIView animateViewWithDuration:0.5f
animations:^{
_rocket.center = _rocketStartCenter;
}];
我建议使用大约 0.3-0.35 秒的动画,大多数 iOS 动画都在这个范围内。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.