IOS 多线程 动画

「已注销」 2017-04-25 04:34:22
先说一下我想做什么:
我想要在一个类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");
}
//
...全文
419 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
killer_we 2017-05-03
  • 打赏
  • 举报
回复
青Feng细雨 2017-04-28
  • 打赏
  • 举报
回复
4楼回答正解
编天码地 2017-04-26
  • 打赏
  • 举报
回复
[UIViewanimateWithDuration:(NSTimeInterval)//动画持续时间 animations:^{ //执行的动画 }completion:^(BOOLfinished){ //动画执行完毕后的操作 }];
编天码地 2017-04-26
  • 打赏
  • 举报
回复
uiview 的block 方法 三行搞定
「已注销」 2017-04-26
  • 打赏
  • 举报
回复
引用 1 楼 waterhexuan 的回复:
你和谁学的这样写动画的
其实我也不是真正的在做动画,只是想要把移动的过程显示出来,,不知道还有什么更好的方法吗?
编天码地 2017-04-25
  • 打赏
  • 举报
回复
你和谁学的这样写动画的

29,049

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧