IOS 动画 多线程 animationDidStop
来源:互联网 发布:多开同步器软件 编辑:程序博客网 时间:2024/06/06 01:38
先说一下我想做什么:
我想要在一个类A中调用另一个viewcontroler显示动画,在动画执行完之后类A继续执行
我当前的做法:
在类A中新建线程,线程中调用动画函数,并在线程前加锁,在动画执行完之后调用animationDidStop解锁。
遇到的问题:
执行完之后不会调用animationDidStop,但是如果我使用定时则可以调用animationDidStop
以下是我大致的代码:
我想要在一个类A中调用另一个viewcontroler显示动画,在动画执行完之后类A继续执行
我当前的做法:
在类A中新建线程,线程中调用动画函数,并在线程前加锁,在动画执行完之后调用animationDidStop解锁。
遇到的问题:
执行完之后不会调用animationDidStop,但是如果我使用定时则可以调用animationDidStop
以下是我大致的代码:
//类A: [_lock lock]; [NSThread detachNewThreadSelector:@selector(moveChess) toTarget:self withObject:nil]; [_lock lock]; NSLog(@"_lock locked"); [_lock unlock];/*使用定时则可以调用animationDidStop [NSThread detachNewThreadSelector:@selector(moveChess) toTarget:self withObject:nil];[NSThread sleepForTimeInterval:0.5f];*///moveChess -(void)moveChess{ NSLog(@"moveChess... ..."); [self->_delegate moveChess:_preTag toTag:_tag]; } //viewcontroler//委托方法:移动棋子动画-(void)moveChess:(int64_t)fromTag toTag:(int64_t)toTag{ UIButton * btn1=(UIButton*)[self.view viewWithTag:fromTag]; UIButton * btn2=(UIButton*)[self.view viewWithTag:toTag]; CABasicAnimation *anima = [CABasicAnimation animationWithKeyPath:@"position"]; anima.fromValue = [NSValue valueWithCGPoint:btn1.center]; anima.toValue = [NSValue valueWithCGPoint:btn2.center]; anima.duration = 0.5f; [_chessBtn[fromTag%100].layer addAnimation:anima forKey:@"moveChessAnimation"];}//- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{ NSLog(@"fdsafdsa1"); [self->_game->_lock unlock]; NSLog(@"unlock");}//
animationDidStop不会调用的原因:首先,动画效果在新建的线程中,线程会在-(void)moveChess:(int64_t)fromTag toTag:(int64_t)toTag执行完之后直接退出;
而animationDidStop比较特殊会被延后执行(这个感觉就像UI被改变时界面并不会即时的做出相应的变化);
他并不像一般的调用函数,我们可以看做是一个定时任务,而线程退出之后定时任务就会取消掉,所以animationDidStop最后没有被调用。。
(以上是我个人从现象推出来的结论,具体的原理并不清楚,只是当做个人笔记)
0 0
- IOS 动画 多线程 animationDidStop
- iOS在CAAnimationDelegate代理方法animationDidStop中区分是哪个动画
- iOS中CoreAnimation的一些小问题 animationDidStop确认哪个动画结束 和 连续animation之间的动画不连续闪现
- 在代理方法animationDidStop中区分是哪个动画
- iOS动画 核心动画
- iOS动画 UIView动画
- iOS动画 CATransition动画
- iOS 动画 UIView动画
- iOS动画-基础动画
- ios 动画
- IOS动画
- Ios 动画
- ios动画
- IOS 动画
- iOS动画
- ios动画
- ios动画
- iOS动画
- docker初级入门篇
- 3天学习完AngularJS基础内容小结
- 正则表达式-Regex
- Lucene学习链接
- SQL基础学习(六)- MySQL的insert语句
- IOS 动画 多线程 animationDidStop
- IDEA 字体、语法高亮设置
- webservice 简单项目之心得体会
- 最少货币流通, 硬币找钱问题
- mysql更新语句使用order by
- 修改recycleview封装
- 剑指offer:(19)面试官谈面试思路:二叉树的镜像
- 基于gitosis管理git服务器
- 微服务架构Spring Cloud和Dubbo 还有EDAS