iOS 中的连续动画?
Continuous animation in iOS?
就我而言,我对内容有看法。我想在 UILongPressGestureRecognizer
事件上滚动此内容:
- 如果触摸位置 y 足够靠近向上视图边界,则向上滚动;
- 如果触摸位置 y 足够靠近底部视图边框,则向下滚动。
我不能简单地使用 scrollView,所以我使用了 CATransform3D
结构和 animateWithDuration:...
方法。问题是我不知道应该滚动多长时间(滚动动画的持续时间)。第二个问题是当触摸位置(长按手势)发生变化时应该调用动画 - 这看起来很容易但可能会影响最终解决方案。
如何解决此类问题?
我不确定我是否正确理解了你的问题,在这里我分享了一个方法,它监听 longPressRecognizer
并在用户按下该视图时为该视图设置动画。当用户停止按下时,视图动画回到其默认状态。您可以通过向 if/else if's 添加位置检查语句来检查用户手势是否满足您的位置条件。希望对您有所帮助。
- (void)longPressed:(UILongPressGestureRecognizer *)recognizer {
UIView *longPressView = self.longPressView;
if (recognizer.state == UIGestureRecognizerStateBegan) {
[UIView animateWithDuration:longPressDuration
delay:0.f
options:UIViewAnimationOptionCurveLinear|UIViewAnimationOptionBeginFromCurrentState
animations:^{
//do stuff
}
completion:^(BOOL finished) {
if (finished) {
//long press exceeded time limit: do stuff
}
}];
}
else if (recognizer.state == UIGestureRecognizerStateEnded) {
[UIView animateWithDuration:longPressDuration/2.0
delay:0.f
options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionBeginFromCurrentState
animations:^{
//do stuff
}
completion:nil];
}
}
就我而言,我对内容有看法。我想在 UILongPressGestureRecognizer
事件上滚动此内容:
- 如果触摸位置 y 足够靠近向上视图边界,则向上滚动;
- 如果触摸位置 y 足够靠近底部视图边框,则向下滚动。
我不能简单地使用 scrollView,所以我使用了 CATransform3D
结构和 animateWithDuration:...
方法。问题是我不知道应该滚动多长时间(滚动动画的持续时间)。第二个问题是当触摸位置(长按手势)发生变化时应该调用动画 - 这看起来很容易但可能会影响最终解决方案。
如何解决此类问题?
我不确定我是否正确理解了你的问题,在这里我分享了一个方法,它监听 longPressRecognizer
并在用户按下该视图时为该视图设置动画。当用户停止按下时,视图动画回到其默认状态。您可以通过向 if/else if's 添加位置检查语句来检查用户手势是否满足您的位置条件。希望对您有所帮助。
- (void)longPressed:(UILongPressGestureRecognizer *)recognizer {
UIView *longPressView = self.longPressView;
if (recognizer.state == UIGestureRecognizerStateBegan) {
[UIView animateWithDuration:longPressDuration
delay:0.f
options:UIViewAnimationOptionCurveLinear|UIViewAnimationOptionBeginFromCurrentState
animations:^{
//do stuff
}
completion:^(BOOL finished) {
if (finished) {
//long press exceeded time limit: do stuff
}
}];
}
else if (recognizer.state == UIGestureRecognizerStateEnded) {
[UIView animateWithDuration:longPressDuration/2.0
delay:0.f
options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionBeginFromCurrentState
animations:^{
//do stuff
}
completion:nil];
}
}