2

我想要一个可以在多个视图控制器上显示的自定义视图。我想像 UIAlertView 一样设置它,在其中初始化它,然后调用 [myView show] 将其添加到当前视图控制器。想知道如何将自定义 uiview 直接从它的类添加到当前视图控制器中。视图也会在设定的时间后自行关闭(基本上自定义视图是图像的动画,在淡出之前显示一些统计信息)。

从类方法 [myView show] 调用将取代必须初始化视图,然后调用 [self.view addSubview:myView]。

直接从其类中显示/删除自定义视图的最佳方法是什么?

4

2 回答 2

4

我对 jsd 采取了不同的策略,将其添加到视图中。也许窗户更好。但是当我尝试它时,这段代码似乎做了想要的事情:

@implementation EWView

+ (void)show:(UIView *)superView {
    EWView *instantView = [[EWView alloc]initWithFrame:CGRectMake(20, 20, 50, 50)];
    instantView.backgroundColor = [UIColor greenColor];
    [superView addSubview:instantView];
    int64_t delayInSeconds = 4.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [instantView removeFromSuperview];
    });
}

@end

我从 UIViewController 调用它

[EWView show:self.view];

只有在块尚未完成执行时,视图才会继续存在。当块完成时,EWView 将被释放。

于 2012-12-04T20:09:47.893 回答
2

UIAlertView 和朋友将自己添加到 UIWindow 的视图中,而不是当前视图控制器的视图。这就是你应该做的。

如果您知道它们总是会在某个预定时间淡出,您可以制作一个块来执行删除并使用 dispatch_after()。请参阅如何在延迟后触发块,例如 -performSelector:withObject:afterDelay:?

于 2012-12-04T19:55:57.863 回答