更新设备旋转更改时的阴影路径。阴影问题

问题描述 投票:0回答:1

我有一个包含其他视图的视图。 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秒后

编辑我决定创建一个新的空白项目,看看为什么它不起作用。我的View控制器和此代码中有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
}

当您旋转设备时,阴影位置不正确。 shadowproblem

1秒后看起来不错(正常状态)normalstate

ios swift xcode uibezierpath layoutsubviews
1个回答
0
投票

您可以尝试以这种方式设置ViewForShadow:

在ViewController中:

    fileprivate func setupMyView() {
        viewForShadow.layer.shadowColor = #colorLiteral(red: 0.2901960784, green: 0.2901960784, blue: 0.2901960784, alpha: 1)
        viewForShadow.layer.shadowOffset = CGSize.zero
        viewForShadow.layer.shadowRadius = 4
        viewForShadow.layer.shadowOpacity = 1
        viewForShadow.backgroundColor = .clear
    }

如你所见,没有shadowPath

WhiteView(包含bottomBlueView的视图)将有一些角半径设置:

    fileprivate func setupWhiteView() {
        whiteView.layer.cornerRadius = 5.0
        whiteView.layer.masksToBounds = true
    }

那应该够了。

© www.soinside.com 2019 - 2024. All rights reserved.