4

点击 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 等)被删除,它会立即被隐藏。为什么?如何让视图立即隐藏?

4

1 回答 1

7

在执行路径返回到主运行循环之前,.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];
}];

另外,一个小问题:您应该使用常量YES和属性和参数,而不是and 。NOBOOLtruefalse

于 2013-05-07T13:03:12.050 回答