gpt4 book ai didi

iOS >> 动画 block >> 更改 block 执行的 Moving ImageView 方向 'In the Middle'

转载 作者:行者123 更新时间:2023-11-28 19:04:28 25 4
gpt4 key购买 nike

在实现 UIView animateWithDuration:animations:completion: Class 方法时,我遇到了一个我不知道如何处理的场景。

我有一个在屏幕上移动的 UIImageView。在某个事件发生时,它应该改变方向,并移动到一个新的位置。但是(!)似乎如果发生此事件,它不仅会改变方向并移动到新位置,还会“跳”到原始“结束位置”并从那里开始移动到新位置。

我不确定如何在 completion == NO 时指示“移动对象”捕获其当前位置并从那里开始动画,而不是跳到预定的结束位置.

代码如下:

- (IBAction)goHere:(UIButton *)sender
{
CGPoint movingEndPoint;
if ( sender == self.btn1 )
{
movingEndPoint = CGPointMake( sender.center.x + 40, sender.center.y + 40 );
}
if ( sender == self.btn2 )
{
movingEndPoint = CGPointMake( sender.center.x - 40, sender.center.y - 40 );
}

[UIView animateWithDuration:3
animations:^ {
self.movingObj.center = movingEndPoint;
}
completion:^(BOOL completion) {
if (completion == NO)
{
//How to express "New Position = Current Position"?
}
}];
}

最佳答案

此行为已在 iOS 8 中得到纠正(它使用对象的当前位置和方向拾取新动画),但在早期的 iO​​S 版本中,最简单的解决方法是使用 animateWithDuration 使用 options 参数,并包含 UIViewAnimationOptionBeginFromCurrentState 选项。

或者,您可以使用 View 层的 presentationLayer 获取动画中的当前位置。例如,

CALayer *layer = self.movingObj.layer.presentationLayer;
CGRect currentFrame = layer.frame;

然后您可以设置然后停止动画(例如 [self.movi​​ngObj.layer removeAllAnimations]),然后使用此 currentFrame 设置 View 的 frame 在启动下一个动画之前。

关于iOS >> 动画 block >> 更改 block 执行的 Moving ImageView 方向 'In the Middle',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21729314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com