【发布时间】:2019-03-21 09:44:30
【问题描述】:
我有一个包含其他视图的视图。 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
}
每当我旋转我的设备时,我都会看到这个看起来很奇怪的阴影
我了解此问题的发生是因为 shadow 具有纵向/横向模式的 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秒后
编辑 我决定创建一个新的空白项目,看看为什么它不起作用。我的视图控制器和这段代码中有 1 个 UIView。
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
}
【问题讨论】:
-
嗨!似乎问题不在于阴影。我想你有一些在主线程中执行的繁重功能。您能否提供更多有关您的 ViewController 中发生的事情的信息。
-
我正在使用 mapKit 并在地图上显示用户位置。这个主视图控制器正在使用地图,这个底部视图带有一个按钮(蓝色条)来停止显示位置。
-
好的。你有一些关于调试终端布局问题的消息吗?我已经创建了类似的功能并且没有问题。
-
终端中没有错误或问题。不知道为什么会这样。
-
抱歉,如果没有更多详细信息(源代码),很难找到问题所在。您可以尝试逐步禁用 ViewController 的功能并调查问题状态。
标签: ios swift xcode uibezierpath layoutsubviews