gpt4 book ai didi

ios - 如何可靠地阻止 Objective-C 中的重复动画调用?

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:10:24 25 4
gpt4 key购买 nike

用户可以通过滑动手势启动动画。我想阻止对动画的重复调用,以确保一旦动画开始,它就不会再次启动,直到它完成——如果用户不小心多次滑动,可能会发生这种情况。

我想大多数人都以底部显示的方式使用 bool 标志 (BOOL isAnimatingFlag) 来实现此控件。我以前在应用程序中做过很多次这样的事情——但我从来没有 100% 确定我的标志是否保证具有我想要的值,因为动画使用 block 并且我不清楚我的动画完成是什么线程 block 正在运行。

这种方式(阻止重复动画)对于多线程执行是否可靠?

/* 'atomic' doesn't 
* guarantee thread safety
* I've set up my flag as follows:
* Does this look correct for the intended usage?
*/
@property (assign, nonatomic) BOOL IsAnimatingFlag;

//…

@synthesize IsAnimatingFlag

//…

-(void)startTheAnimation{

// (1) return if IsAnimatingFlag is true
if(self.IsAnimatingFlag == YES)return;

/* (2) set IsAnimatingFlag to true
* my intention is to prevent duplicate animations
* which may be caused by an unwanted double-tap
*/
self.etiIsAnimating = YES;


// (3) start a new animation
[UIView animateWithDuration:0.75 delay:0.0 options:nil animations:^{

// animations would happen here...

} completion:^(BOOL finished) {

// (4) reset the flag to enable further animations
self.IsAnimatingFlag = NO;
}];
}

最佳答案

如果您不希望用户多次触发手势,请禁用该手势

- (void)startTheAnimation:(id)sender
{
[sender setEnabled:NO];

[UIView animateWithDuration:0.75 delay:0.0 options:nil animations:^{

// animations would happen here...

} completion:^(BOOL finished) {
[sender setEnabled:YES];
}];
}

更新

手势也有一个 enabled 属性,所以你可以使用相同的想法,就好像它是一个按钮并改变它的启用状态

关于ios - 如何可靠地阻止 Objective-C 中的重复动画调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15160126/

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