我有一个GUI逻辑所在的视图控制器
我有一个从这个视图控制器启动的线程,我正在做一些处理
我有两个观点,我想在一段时间后从我的线程中翻转
据我所知,我们只能从视图控制器中翻转
所以请建议我从我的自定义线程类中调用视图控制器的方法。
提前致谢
答案 0 :(得分:1)
您应该使用Grand Central Dispatch(GCD)来执行异步操作。这样你就可以从主线程执行密集操作,然后回到主线程来用这个简单的语法执行你的动画:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, kNilOptions), ^{
//Calculations
dispatch_async(dispatch_get_main_queue(), ^{
//Do animations
});
});
答案 1 :(得分:1)
因此,我想到的第一个选择是:
如果您可以从线程类访问视图控制器 然后你可以这样做:
dispatch_async(dispatch_get_main_queue(), ^{
[yourVc callMethodToFlip];
});
如果您无权访问,则可以使用通知:
<强> YourVC.m 强>
-(void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(methodForFlip) name:A_NOTIFICATION_NAME object:nil];
}
<强> InYourTreadClass.m 强>
-(void)someMethodThatExecutesAsync {
//dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter]
postNotificationName:A_NOTIFICATION_NAME
object:nil]; //or yoou can send an object
});
}
另一种方法是,为你的自定义线程类创建一个带有块参数的方法,每当你从你的vc创建一个线程时,发送一个块参数,该参数也将从你的线程中使用dispatch_async
< / p>
答案 2 :(得分:0)
在你的线程类中,添加一个指向视图控制器的指针:
@property (nonatomic, assign) YourViewController *viewController;
当您的视图控制器创建线程时,将线程的viewController
属性设置为视图控制器:
yourThreadClass.viewController = self;
在View Controller类中,创建flipViews
方法:
-(void)flipViews
{
// ...
}
在你的线程类中,只要需要翻转视图,只需调用:
[viewController performSelectorOnMainThread:@selector:(flipViews) withObject:nil waitUntilDone:YES];