【问题标题】:Moving Particle View to Front of Screen?将粒子视图移动到屏幕前面?
【发布时间】:2014-04-18 07:55:32
【问题描述】:

我目前有一个连接到情节提要的粒子视图。我面临的问题是在显示此视图的同时显示警报,并且警报始终显示在粒子视图的前面。有没有一种方法可以让我始终将粒子视图放在前面?我正在使用一个名为 SIAlertView 的第三方警报库,所以我假设它是可能的。

我已经记录了 alertView 的 zPosition 并且它始终为 0,因此我将粒子视图层的 zPosition 设置为 10,但它仍然显示在警报视图下方。

这是故事板层次结构:

【问题讨论】:

  • 我不确定,但你对 z 索引是什么意思,但在 iOS 中几乎没有其他概念可以处理深度。检查此链接stackoverflow.com/questions/4631878/… 您应该将子视图放在另一个视图的顶部或上方,我认为它会起作用
  • 这与 z-index 无关。是 UIAlertView 中的 windowLevel 让一切都落后
  • 我认为您可能是正确的。我记录了 alertView 的超级视图,并得到了 UIWindow。

标签: ios objective-c uiview uialertview caemitterlayer


【解决方案1】:

我不了解 SIAlertView,但正常的 UIAlertView 通过单独的窗口显示。如果你想重叠它,你不能通过改变 zpozition 来做到这一点,你还必须使用一个单独的窗口:

// do not forget to keep strong reference for it somewhere!
UIWindow *notificationWindow; 

//your frame here!
notificationWindow = [[UIWindow alloc] initWithFrame: some_cgrect];

notificationWindow.backgroundColor = [UIColor clearColor]; // your color if needed
notificationWindow.userInteractionEnabled = NO; // if needed

// IMPORTANT PART!
notificationWindow.windowLevel = UIWindowLevelAlert + 1; 

notificationWindow.rootViewController = [UIViewController new];
notificationWindow.hidden = NO; // This is also important!

更新:

也可以重叠状态栏使用

notificationWindow.windowLevel = UIWindowLevelStatusBar;

解除 UIWindow 只是使指向它的强指针无效。比如:

self.strongPointerToYourWindow = nil;

【讨论】:

  • 谢谢Avt?我试过这个并将我的particleView作为一个子视图添加到这个,它就像一个魅力!我现在的问题是,一旦我完成调用我的方法,我该如何删除它?我有一个方法,我在其中创建此通知窗口并启动我的粒子动画。
  • BTW 我如何隐藏状态栏?添加此代码后,状态栏不再隐藏。
  • 我已经更新了答案。请检查。如果回答有用请点赞/采纳!
  • 感谢 Avt!我在我的 keyWindow 中隐藏了状态栏,但是当我添加此代码时,新窗口会显示一个状态栏。我想删除这个状态栏(隐藏它)。我像你提到的那样替换了 windowLevel,但它仍然显示状态栏:/
  • 抱歉不能理解你。我还需要查看您的代码来帮助您。我建议为您的新问题再开一张票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多