如何在 Swift 中旋转 UIAlertController
How to rotate UIAlertController in Swift
我有一个工作 UIAlertController
,但我想将 alert.view
向左旋转 90 度。
我该怎么做?我的代码如下:
let alert = UIAlertController(title: "", message: "Message Sample", preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "Okay", style: .Default){(action)->() in })
presentViewController(alert, animated: true) {}
我尝试添加:
alert.view.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
但是没用。
谢谢!
使用此代码:
let alert = UIAlertController(title: "", message: "Message Sample", preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "Okay", style: .Default){(action)->() in })
self.presentViewController(alert, animated: true, completion: {() -> Void in
alert.view.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
})
Swift3
let alert = UIAlertController(title: "", message: "Message Sample", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Okay", style: .default){(action)->() in })
self.present(alert, animated: true, completion: {() -> Void in
alert.view.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi/2) )
})
你可以做到这一点:
更新答案
self.presentViewController(alert, animated: true, completion: {() -> Void in
// alert.view.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
UIView.animateWithDuration(1.0, delay: 0, options: .CurveLinear, animations: { () -> Void in
alert.view.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
}) { (finished) -> Void in
// do something if you need
}
})
我认为 FaceID 可能更常出现这种情况。我必须解决这个问题,因为我有一个处于横向模式的应用程序,但是当用户在 iPhone 上启动应用程序时,或者当他们必须使用 FaceID 对应用程序进行身份验证时,他们通常是纵向模式。所以我想根据用户拿着 phone 的方式显示警报。我的解决方案是如下扩展 UIAlertController class;
extension UIAlertController {
open override func viewWillAppear(_ animated: Bool) {
view.isHidden = true
}
override open func viewDidAppear(_ animated: Bool) {
let appDirection = UIApplication.shared.statusBarOrientation
let deviceDirection = UIDevice.current.orientation
var direction:CGFloat = 0
if deviceDirection == .portrait {
if appDirection == .landscapeLeft {
direction = 1.0
} else if appDirection == .landscapeRight {
direction = -1.0
}
} else if deviceDirection == .portraitUpsideDown {
if deviceDirection == .landscapeLeft {
direction = -1.0
} else if appDirection == .landscapeRight {
direction = 1.0
}
}
if direction != 0 {
view.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2) * direction);
}
view.isHidden = false
}
open override func viewWillDisappear(_ animated: Bool) {
view.isHidden = true
}
}
如果您的应用程序支持 landscapeRight、landscapeLeft 和 default(纵向),您可以试试这个
self.present(alertController, animated: false, completion: {
switch UIDevice.current.orientation {
case .landscapeRight:
self.alertController.view.transform=CGAffineTransform(rotationAngle: CGFloat(-Double.pi / 2))
case .landscapeLeft:
self.alertController.view.transform=CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2))
default:
self.alertController.view.transform=CGAffineTransform.identity
}
})
这将根据您的屏幕旋转来旋转您的警报视图,而不会产生任何 UI 动画问题。
我有一个工作 UIAlertController
,但我想将 alert.view
向左旋转 90 度。
我该怎么做?我的代码如下:
let alert = UIAlertController(title: "", message: "Message Sample", preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "Okay", style: .Default){(action)->() in })
presentViewController(alert, animated: true) {}
我尝试添加:
alert.view.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
但是没用。
谢谢!
使用此代码:
let alert = UIAlertController(title: "", message: "Message Sample", preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "Okay", style: .Default){(action)->() in })
self.presentViewController(alert, animated: true, completion: {() -> Void in
alert.view.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
})
Swift3
let alert = UIAlertController(title: "", message: "Message Sample", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Okay", style: .default){(action)->() in })
self.present(alert, animated: true, completion: {() -> Void in
alert.view.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi/2) )
})
你可以做到这一点:
更新答案
self.presentViewController(alert, animated: true, completion: {() -> Void in
// alert.view.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
UIView.animateWithDuration(1.0, delay: 0, options: .CurveLinear, animations: { () -> Void in
alert.view.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
}) { (finished) -> Void in
// do something if you need
}
})
我认为 FaceID 可能更常出现这种情况。我必须解决这个问题,因为我有一个处于横向模式的应用程序,但是当用户在 iPhone 上启动应用程序时,或者当他们必须使用 FaceID 对应用程序进行身份验证时,他们通常是纵向模式。所以我想根据用户拿着 phone 的方式显示警报。我的解决方案是如下扩展 UIAlertController class;
extension UIAlertController {
open override func viewWillAppear(_ animated: Bool) {
view.isHidden = true
}
override open func viewDidAppear(_ animated: Bool) {
let appDirection = UIApplication.shared.statusBarOrientation
let deviceDirection = UIDevice.current.orientation
var direction:CGFloat = 0
if deviceDirection == .portrait {
if appDirection == .landscapeLeft {
direction = 1.0
} else if appDirection == .landscapeRight {
direction = -1.0
}
} else if deviceDirection == .portraitUpsideDown {
if deviceDirection == .landscapeLeft {
direction = -1.0
} else if appDirection == .landscapeRight {
direction = 1.0
}
}
if direction != 0 {
view.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2) * direction);
}
view.isHidden = false
}
open override func viewWillDisappear(_ animated: Bool) {
view.isHidden = true
}
}
如果您的应用程序支持 landscapeRight、landscapeLeft 和 default(纵向),您可以试试这个
self.present(alertController, animated: false, completion: {
switch UIDevice.current.orientation {
case .landscapeRight:
self.alertController.view.transform=CGAffineTransform(rotationAngle: CGFloat(-Double.pi / 2))
case .landscapeLeft:
self.alertController.view.transform=CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2))
default:
self.alertController.view.transform=CGAffineTransform.identity
}
})
这将根据您的屏幕旋转来旋转您的警报视图,而不会产生任何 UI 动画问题。