ios开发 子线程不断更新主UI中的UIImageView形成动画。但是UIImageView中的图片只更新了一次。 20
主线程:(包含属性:NSThread*titlevideo;UIImageView*backgroundani;)backgroundani=[[UIImageViewa...
主线程:
(包含属性:NSThread *titlevideo; UIImageView *backgroundani; )
backgroundani = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.height, frame.size.width)];
titlevideo = [[NSThread alloc] initWithTarget:self selector:@selector(thread_titlevideo:) object:nil];
[titlevideo start];
子线程:
- (void)thread_titlevideo:(id)sender
{
while (YES) {
[backgroundani setImage:[UIImage imageNamed:[NSString stringWithFormat:@"titleVideo%d.jpg",ct]]];
usleep(300000);
if (ct == 487) { ct = 1; }
} }
本来想这样组成一个487帧的循环动画,但是实际运行却只更新了一次,而循环却正常走着。
是跟子线程不能访问主线程UI有关吗?
我该怎样在不卡住主线程的情况下解决这个问题呢?
我就是想这个图片控件一直进行着循环动画,而程序又不会失去响应。 展开
(包含属性:NSThread *titlevideo; UIImageView *backgroundani; )
backgroundani = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.height, frame.size.width)];
titlevideo = [[NSThread alloc] initWithTarget:self selector:@selector(thread_titlevideo:) object:nil];
[titlevideo start];
子线程:
- (void)thread_titlevideo:(id)sender
{
while (YES) {
[backgroundani setImage:[UIImage imageNamed:[NSString stringWithFormat:@"titleVideo%d.jpg",ct]]];
usleep(300000);
if (ct == 487) { ct = 1; }
} }
本来想这样组成一个487帧的循环动画,但是实际运行却只更新了一次,而循环却正常走着。
是跟子线程不能访问主线程UI有关吗?
我该怎样在不卡住主线程的情况下解决这个问题呢?
我就是想这个图片控件一直进行着循环动画,而程序又不会失去响应。 展开
2个回答
展开全部
UI的操作或更新必须在主线程里进行。
[backgroundani setImage:[UIImage imageNamed:[NSString stringWithFormat:@"titleVideo%d.jpg",ct]]];
应改为:
[backgroundani performSelectorOnMainThread:@selector(setImage:) withObject:[UIImage imageNamed:[NSString stringWithFormat:@"titleVideo%d.jpg",ct]] waitUntilDone:YES];
[backgroundani setImage:[UIImage imageNamed:[NSString stringWithFormat:@"titleVideo%d.jpg",ct]]];
应改为:
[backgroundani performSelectorOnMainThread:@selector(setImage:) withObject:[UIImage imageNamed:[NSString stringWithFormat:@"titleVideo%d.jpg",ct]] waitUntilDone:YES];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询