iOS:覆盖视图。哪种观点正确?

iOS:覆盖视图。哪种观点正确?,ios,objective-c,iphone,overlay,Ios,Objective C,Iphone,Overlay,我有一个在蓝牙设备上保存一些值的应用程序。这当然需要一些时间。 当我退出设置屏幕时,新设置将保存到此设备。在保存过程中,我将在屏幕上放置一个包含活动指示器的覆盖视图,以阻止任何输入。保存过程完成后,视图将收到一个回调,以将弹出窗口删除到上一个视图并删除覆盖视图。我试图以不同的方式实现这个想法,但总是产生不受欢迎的副作用 第一次实施: 我将覆盖视图放在应用程序的键窗口上。 一切如愿。但是,当接收到回调时,覆盖视图会首先被删除,并在稍微延迟的情况下执行返回到上一个视图的转换,甚至[overlay r

我有一个在蓝牙设备上保存一些值的应用程序。这当然需要一些时间。 当我退出设置屏幕时,新设置将保存到此设备。在保存过程中,我将在屏幕上放置一个包含活动指示器的覆盖视图,以阻止任何输入。保存过程完成后,视图将收到一个回调,以将弹出窗口删除到上一个视图并删除覆盖视图。我试图以不同的方式实现这个想法,但总是产生不受欢迎的副作用

第一次实施: 我将覆盖视图放在应用程序的键窗口上。 一切如愿。但是,当接收到回调时,覆盖视图会首先被删除,并在稍微延迟的情况下执行返回到上一个视图的转换,甚至[overlay removeFromSuperView]也是在“ViewDidEnglishe”方法中

第二次实施: 我将覆盖视图放在NavigationController的视图上。 屏幕按预期被阻塞,甚至我在第一个实现想法中使用的这种奇怪的延迟转换效果也消失了。但是当我回到上一个视图时,整个输入都被阻塞了。甚至连覆盖的视图都不见了

-(void)putOverlayView{
    overlayView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];

    overlayView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
    UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc] init];
    activity.center =overlayView.center;
    activity.transform = CGAffineTransformMakeScale(2, 2);
    [activity startAnimating];
    [overlayView addSubview:activity];
    [self.navigationController view] addSubview:overlayView];

}
-(void)savingDone{

    [self.navigationController popViewControllerAnimated:YES];

}
-(void)viewDidDisappear:(BOOL)animated{
[overlayView removeFromSuperview];


}
最后是第三个实现: 我把覆盖视图放在[自我视图]上。 有了这个选项,我没有任何上述效果。尽管带有“后退”按钮的NavigationController标题没有被阻止,因为它位于[self view]上方

-(void)putOverlayView{
    overlayView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];

    overlayView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
    UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc] init];
    activity.center =overlayView.center;
    activity.transform = CGAffineTransformMakeScale(2, 2);
    [activity startAnimating];
    [overlayView addSubview:activity];
    [self view] addSubview:overlayView];

}
-(void)savingDone{

    [self.navigationController popViewControllerAnimated:YES];

}
-(void)viewDidDisappear:(BOOL)animated{
[overlayView removeFromSuperview];


}
我尝试了三种不同的想法,它们都没有按我的意愿发挥作用,但总是以不同的方式发挥作用。 在哪个视图上,我必须放置覆盖视图才能不产生任何未显示的效果? 我有一种感觉,这将是正确的方式,把它放在navigationController的视图,但我如何处理它,屏幕是解锁的输入之后

我希望我提供了足够的信息,否则我当然会将它们添加到帖子中

谢谢你的帮助

-(void)putOverlayView{
    overlayView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];

    overlayView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
    UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc] init];
    activity.center =overlayView.center;
    activity.transform = CGAffineTransformMakeScale(2, 2);
    [activity startAnimating];
    [overlayView addSubview:activity];
    [self view] addSubview:overlayView];

}
-(void)savingDone{

    [self.navigationController popViewControllerAnimated:YES];

}
-(void)viewDidDisappear:(BOOL)animated{
[overlayView removeFromSuperview];


}