gpt4 book ai didi

animation - UIView 动画闪烁与自动反转

转载 作者:行者123 更新时间:2023-12-04 10:29:14 25 4
gpt4 key购买 nike

我正在尝试为一个空表单字段设置一个指示器的动画,所以我使用下面的方法来设置一个位置的动画,反转动画,然后重复。在模拟器中,这工作正常,在我的 3GS 上,当调用完成块时看起来有闪烁。指示器在中间位置短暂显示,而不是在其原点返回。

关于为什么会发生这种情况的任何想法?谢谢。

- (void)bounceFormIndicator {
if (formIndicator.superview == nil) {
return;
}

int bounceDistance = 24;

[UIView animateWithDuration:0.6
delay:0
options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionAllowUserInteraction
animations:^{
CGRect indicatorFrame = formIndicator.frame;
indicatorFrame.origin.x += bounceDistance;
formIndicator.frame = indicatorFrame;
}completion:^(BOOL finished){
CGRect indicatorFrame = formIndicator.frame;
indicatorFrame.origin.x -= bounceDistance;
formIndicator.frame = indicatorFrame;
[self bounceFormIndicator];
}];
}

最佳答案

我遇到了同样的问题,并前往 Apple DTS 寻求解决方法。

根据 DTS,这种“闪烁”效果或回弹效果是预期的行为......我认为我的项目做错了很长时间。

特别是这种方式,因为文档指出,对于

UIViewAnimationOptionAutoreverse Run the animation backwards and forwards.

Must be combined with the UIViewAnimationOptionRepeat option.



为了让闪烁消失,我必须做两件事。

我的实现是动态的,因此您可能不必实现第一步,但我将其保留在这里仅供引用。

首先,我检查了是否 UIViewAnimationOptionAutoreverse是我要传递给动画的选项的一部分, UIViewAnimationOptionRepeat 不是 ...如果是这样,我通过添加如下一行将其从选项中剥离:
animationOptions &= ~UIViewAnimationOptionAutoreverse;

为了创建不重复的倒车动画,我添加了一个相反的 UIView 动画作为我的完成块。如果是 UIViewAnimationOptionCurveEaseIn,我也反转了缓动。或 UIViewAnimationOptionCurveEaseOut ...

我的项目中的代码如下:

从对象的 animationOptions 中去除 autoreverse 选项的语句:
if ((animationOptions & AUTOREVERSE) == AUTOREVERSE) {
self.shouldAutoreverse = YES;
animationOptions &= ~AUTOREVERSE;
}

处理动画的重写属性 setter 的示例:
-(void)setCenter:(CGPoint)center {
CGPoint oldCenter = CGPointMake(self.center.x, self.center.y);

void (^animationBlock) (void) = ^ { super.center = center; };
void (^completionBlock) (BOOL) = nil;

BOOL animationShouldNotRepeat = (self.animationOptions & REPEAT) != REPEAT;
if(self.shouldAutoreverse && animationShouldNotRepeat) {
completionBlock = ^ (BOOL animationIsComplete) {
[self autoreverseAnimation:^ { super.center = oldCenter;}];
};
}
[self animateWithBlock:animationBlock completion:completionBlock];
}

倒车不重复的情况下调用的补全方法:
-(void)autoreverseAnimation:(void (^)(void))animationBlock {
C4AnimationOptions autoreverseOptions = BEGINCURRENT;
if((self.animationOptions & LINEAR) == LINEAR) autoreverseOptions |= LINEAR;
else if((self.animationOptions & EASEIN) == EASEIN) autoreverseOptions |= EASEOUT;
else if((self.animationOptions & EASEOUT) == EASEOUT) autoreverseOptions |= EASEIN;

[UIView animateWithDuration:self.animationDuration
delay:0
options:autoreverseOptions
animations:animationBlock
completion:nil];
}

关于animation - UIView 动画闪烁与自动反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7462802/

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