我有一个UIView
多数民众赞成以编程方式创建:
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
if (self) {
self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:.5];
UIImageView* closeButton = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"modal_close.png"]];
closeButton.frame = CGRectMake(self.frame.size.width*.89, self.frame.size.height*.09, closeButton.frame.size.width, closeButton.frame.size.height);
UIButton* button = [[UIButton alloc] initWithFrame:CGRectMake(self.frame.size.width*.89, self.frame.size.height*.09,20, 20)];
[button addTarget:self action:@selector(close) forControlEvents:UIControlEventTouchUpInside];
UIView* mainView = [[UIView alloc] initWithFrame:CGRectMake(self.frame.size.width*.1,self.frame.size.height*.1,self.frame.size.width*.8,self.frame.size.height*.8)];
mainView.backgroundColor = [UIColor whiteColor];
_displayMainView = mainView;
[self addSubview:_displayMainView];
[self addSubview:closeButton];
[self addSubview:button];
mainView = nil;
closeButton = nil;
}
return self;
}
如何检测旋转? 这是作为另一个现有视图顶部的模式。 这是一个iPad的唯一的应用程序,如果该事项。
你可以让设备开始产生旋转的通知:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
添加您自己的选择,作为一个设备旋转通知观察员:
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil];
然后写您的通知处理程序
- (void)deviceOrientationDidChange:(NSNotification *)notification {
//Obtain current device orientation
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
//Do my thing
}
请记住删除观察者时,你的dealloc方法自定义的UIView被调用(或者当你完成),并停止发电设备变更通知以及。
-(void) dealloc{
[[NSNotificationCenter defaultCenter] removeObserver: self];
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
}
这是否帮助在所有与你的问题?
我重写@ clearwater82的答案斯威夫特3,因为他的做法是一个我最终使用:
我说在我看来的下面的代码init
方法(控制器这将是它viewDidLoad
方法):
// Handle rotation
UIDevice.current.beginGeneratingDeviceOrientationNotifications()
NotificationCenter.default.addObserver(
self,
selector: #selector(self.orientationChanged(notification:)),
name: NSNotification.Name.UIDeviceOrientationDidChange,
object: nil
)
然后我加入了orientationChanged
方法我的看法。 如你所愿,只记得它在上面的代码段还重命名可以重命名这个方法:
// Called when device orientation changes
@objc func orientationChanged(notification: Notification) {
// handle rotation here
}
最后,我加入deinit
方法当视图被去除以消除不必要的通知:
deinit {
NotificationCenter.default.removeObserver(self)
UIDevice.current.endGeneratingDeviceOrientationNotifications()
}
这是什么最后的片段确实是从通知观察家删除视图本身,然后从其他产生旋转的通知停止该设备。 这个方法是我需要什么,但你可能不希望从视图时删除停止生成通知。
我希望这是有用的,欢呼