У меня есть вид, который содержит другие виды.ViewforShadow -> View-> bottomBlueView
func setupMyView() {
myView.layer.shadowColor = #colorLiteral(red: 0.2901960784, green: 0.2901960784, blue: 0.2901960784, alpha: 1)
myView.layer.shadowOffset = CGSize.zero
myView.layer.shadowRadius = 4
myView.layer.shadowOpacity = 1
myView.layer.masksToBounds = false
myView.layer.shadowPath = UIBezierPath(roundedRect: myView.bounds, cornerRadius: myView.frame.height / 10).cgPath
myView.layer.backgroundColor = UIColor.clear.cgColor
}
Всякий раз, когда я поворачиваю свое устройство, я получаю эту странную тень
Я понимаючто эта проблема возникает, потому что тень имеет myView.bounds для портретного / ландшафтного режима.Поэтому мне нужно менять его всякий раз, когда я поворачиваю свое устройство.Я обнаружил, что viewWillLayoutSubviews () и viewDidLayoutSubviews () - отличные функции для решения моей проблемы.
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
//update shadow
myView.layer.shadowPath = UIBezierPath(roundedRect: myView.bounds, cornerRadius: myView.frame.height / 10).cgPath
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
//update shadow
myView.layer.shadowPath = UIBezierPath(roundedRect: myView.bounds, cornerRadius: myView.frame.height / 10).cgPath
}
Я пробовал и то и другое, и оно отлично работает, но всякий раз, когда я поворачиваю свое устройство в течение примерно 1 секунды, возникает эта глючная тень (мне это не нравится)Через 1 секунду
EDIT Я решил создать новый пустой проект и посмотреть, почему он не работает.У меня есть 1 UIView внутри моего контроллера View и этот код.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
setupMyView()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
//update shadow
myView.frame = myView.frame
myView.layer.shadowPath = UIBezierPath(roundedRect: myView.bounds, cornerRadius: myView.frame.height / 10).cgPath
}
func setupMyView() {
myView.layer.shadowColor = #colorLiteral(red: 0.2745098174, green: 0.4862745106, blue: 0.1411764771, alpha: 1)
myView.layer.shadowOffset = CGSize.zero
myView.layer.shadowRadius = 4
myView.layer.shadowOpacity = 1
myView.layer.masksToBounds = false
myView.layer.shadowPath = UIBezierPath(roundedRect: myView.bounds, cornerRadius: myView.frame.height / 10).cgPath
// myView.layer.backgroundColor = UIColor.clear.cgColor
}
} Когда вы поворачиваете устройство, тень находится не в правильном положении.
через 1 секунду выглядит хорошо (нормальное состояние)