Swift 当 iPad 处于横向模式时旋转图标
Swift rotate icons when iPad is in landscape mode
目前我的应用程序在纵向模式下看起来像这样:
但是当我的 iPad 处于横向模式时,我希望我的图标看起来像这样:
现在它在横向模式下看起来像这样:
所以我的问题是:如何旋转图标?我不需要更多的东西只是图标应该移动
从仅支持纵向模式开始。您可以在控制器中观察 UIDeviceOrientationDidChangeNotification,例如:
然后根据您的方向,您可以使用 CGAffineTransformMakeRotation 将图标旋转 (+/-)90 度。
在您的视图控制器中覆盖 viewWillTransitionToSize:withTransitionCoordinator:
并使用以下方法死记硬背您的图像:imageView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
EG:
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
let isPortrait = size.height > size.width
imageView.transform = CGAffineTransformMakeRotation(CGFloat(isPortrait ? 0 : M_PI_2))
}
将这行代码添加到 viewDidLoad 方法中:NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(rotate), name: UIDeviceOrientationDidChangeNotification, object: nil)
这是函数:
func rotate(){
if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeLeft {
self.takephoto.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
self.recordButton.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
} else if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeRight {
self.takephoto.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI_2))
self.recordButton.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI_2))
} else if UIDevice.currentDevice().orientation == UIDeviceOrientation.Portrait {
self.takephoto.transform = CGAffineTransformMakeRotation(CGFloat(0))
self.recordButton.transform = CGAffineTransformMakeRotation(CGFloat(0))
} else if UIDevice.currentDevice().orientation == UIDeviceOrientation.PortraitUpsideDown {
self.takephoto.transform = CGAffineTransformMakeRotation(CGFloat(M_PI))
self.recordButton.transform = CGAffineTransformMakeRotation(CGFloat(M_PI))
}
}
目前我的应用程序在纵向模式下看起来像这样:
但是当我的 iPad 处于横向模式时,我希望我的图标看起来像这样:
现在它在横向模式下看起来像这样:
所以我的问题是:如何旋转图标?我不需要更多的东西只是图标应该移动
从仅支持纵向模式开始。您可以在控制器中观察 UIDeviceOrientationDidChangeNotification,例如:
然后根据您的方向,您可以使用 CGAffineTransformMakeRotation 将图标旋转 (+/-)90 度。
在您的视图控制器中覆盖 viewWillTransitionToSize:withTransitionCoordinator:
并使用以下方法死记硬背您的图像:imageView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
EG:
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
let isPortrait = size.height > size.width
imageView.transform = CGAffineTransformMakeRotation(CGFloat(isPortrait ? 0 : M_PI_2))
}
将这行代码添加到 viewDidLoad 方法中:NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(rotate), name: UIDeviceOrientationDidChangeNotification, object: nil)
这是函数:
func rotate(){
if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeLeft {
self.takephoto.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
self.recordButton.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
} else if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeRight {
self.takephoto.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI_2))
self.recordButton.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI_2))
} else if UIDevice.currentDevice().orientation == UIDeviceOrientation.Portrait {
self.takephoto.transform = CGAffineTransformMakeRotation(CGFloat(0))
self.recordButton.transform = CGAffineTransformMakeRotation(CGFloat(0))
} else if UIDevice.currentDevice().orientation == UIDeviceOrientation.PortraitUpsideDown {
self.takephoto.transform = CGAffineTransformMakeRotation(CGFloat(M_PI))
self.recordButton.transform = CGAffineTransformMakeRotation(CGFloat(M_PI))
}
}