Mic*_*chi 5 iphone objective-c uiwindow ios
我使用上下文UIWindow在我的应用程序中切换key ,以提供更简洁的流程-欢迎窗口=>具有项目列表的主屏幕<=>带有汉堡菜单和物品的项目容器。
函数示例如下:
- (void)updateKeyWindow:(UIWindow *)window withTransition:(WindowTransition)transition
{
UIWindow *originalWindow = _keyWindow;
_keyWindow = window;
window.alpha = 0;
[originalWindow resignKeyWindow];
[originalWindow resignFirstResponder];
originalWindow.userInteractionEnabled = NO;
[window makeKeyAndVisible];
window.transform = (transition == WindowTransitionFlyDown) ? CGAffineTransformMakeScale(1.02, 1.02) :
(transition == WindowTransitionFlyUp) ? CGAffineTransformMakeScale(.96, .96) :
CGAffineTransformIdentity;
// [UIView animateWithDuration:.24 animations:^{
window.alpha = 1;
originalWindow.alpha = 0;
window.transform = CGAffineTransformIdentity;
originalWindow.transform = (transition == WindowTransitionFlyDown) ? CGAffineTransformMakeScale(.96, .96) :
(transition == WindowTransitionFlyUp) ? CGAffineTransformMakeScale(1.02, 1.02) :
CGAffineTransformIdentity;
// } completion:^(BOOL b){
[originalWindow resignFirstResponder];
[originalWindow removeFromSuperview];
[originalWindow.rootViewController.view removeFromSuperview];
originalWindow.rootViewController = nil;
originalWindow = nil;
// }];
}
Run Code Online (Sandbox Code Playgroud)
我使用动画来提供良好的过渡效果,但是我已将其注释掉,以测试它是否不是引起我问题的原因。
问题是,originalWindow从层次结构中删除并退出了块/功能之后,UIWindow 它没有被释放并挂在空间的某个地方。我已经通过将重载断点放入子类中对子类进行了测试-dealloc。
我检查都UIApplication的-keyWindow和AppDelegate的-window,两者都具有新UIWindow分配的对象。
但是,在屏幕上的任意位置点击后,-dealloc前一个的会UIWindow被-[UITouch dealloc]调用堆栈中的某些内容触发。
我发现这种行为完全是很奇怪的,在内肯定有什么问题UIKit,我不希望这种方法有任何问题。
Ale*_*ylo -1
切勿直接调用此方法。系统调用此方法并发布 UIWindowDidResignKeyNotification 让窗口知道它何时不再是关键...
尝试删除它并查看是否可以解决崩溃问题。
| 归档时间: |
|
| 查看次数: |
661 次 |
| 最近记录: |