我正在尝试实现自己的CustomUIActionSheet。
我几乎可以使用它,但我不知道showInView方法是如何工作的。
给出一个视图,这个方法能够将它的视图放在每个视图的前面(可能会将它添加到窗口?)但是它也能够相应地设置旋转到正在添加的视图。
我已经尝试将它添加到我收到的视图窗口中。
CGFloat startPosition = view.window.bounds.origin.y + view.window.bounds.size.height;
self.frame = CGRectMake(0, startPosition, view.window.bounds.size.width, [self calculateSheetHeight]);
[view.window addSubview:self];
self.blackOutView = [self buildBlackOutViewWithFrame:view.window.bounds];
[view.window insertSubview:self.blackOutView belowSubview:self];
通过这样做,所有工作,除了当我在横向上呈现动作表时,动作表从右边开始(因为Windows系统引用它始终是相同的)
我也尝试将它添加到视图窗口的rootViewController中:
UIView * view = view.window.rootViewController.view;
CGFloat startPosition = view.bounds.origin.y + view.bounds.size.height;
self.frame = CGRectMake(0, startPosition, view.bounds.size.width, [self calculateSheetHeight]);
[view addSubview:self];
self.blackOutView = [self buildBlackOutViewWithFrame:view.bounds];
[view insertSubview:self.blackOutView belowSubview:self];
但同样,它在景观上失败了,它没有添加任何东西,或者至少,我看不到它
所以,我的问题是,如何在两个方向上工作的层次结构顶部添加视图的任何线索?
非常感谢!
答案 0 :(得分:1)
在阅读了自定义警报视图的一些源代码以及层次结构顶部的其他ui组件之后,我找到了一个可行的解决方案。
在Windows的第一个子视图中添加视图:
UIView * topView = [[view.window subviews] objectAtIndex:0];
所以最终的代码是
UIView * topView = [[view.window subviews] objectAtIndex:0];
CGFloat startPosition = topView.bounds.origin.y + topView.bounds.size.height;
self.frame = CGRectMake(0, startPosition, topView.bounds.size.width, [self calculateSheetHeight]);
[topView addSubview:self];
self.blackOutView = [self buildBlackOutViewWithFrame:topView.bounds];
[topView insertSubview:self.blackOutView belowSubview:self];