为什么UIImageView只在延迟后隐藏?

时间:2013-05-07 12:59:35

标签: ios cocoa uiimageview hidden quartz-graphics

点击UIView后,我隐藏它并使用UIView和Quartz drawRect初始化新对象。

- (void)viewTapped:(UITapGestureRecognizer *)recognizer {   
    self.vignetteView.hidden=true;
    lupeItself = [[LoupeView alloc] initWithView:_pageView setZoomImageName:_zoomPageImageName setDelegate:self];
} 

以上代码仅在延迟2秒后才隐藏UImageView。但如果最后一行(LoupeView alloc等)被删除,它会立即被隐藏。为什么?如何让视图立即隐藏?

1 个答案:

答案 0 :(得分:7)

在执行路径返回主runloop之前,.hidden = true更改不会显示。第二行可能会阻塞几秒钟,阻止这些更改发生(或drawRect需要很长时间才能进入管道)。

最简单的解决方法是将第二行推迟到下一次runloop迭代:

self.vignetteView.hidden = YES;
// defer execution so the above changes are immediately visible
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    lupeItself = [[LoupeView alloc] initWithView:_pageView setZoomImageName:_zoomPageImageName setDelegate:self];
}];

另外,一个小问题:您应该使用常量YESNO来表示BOOL属性和参数,而不是truefalse。< / p>