Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 向UIImageView添加渐变_Ios_Swift_Uiimageview - Fatal编程技术网

Ios 向UIImageView添加渐变

Ios 向UIImageView添加渐变,ios,swift,uiimageview,Ios,Swift,Uiimageview,我正在尝试向UIImageView添加渐变 viewDidLoad() { self.bookImageBig.sd_setImage(with: URL(string: self.book.image), placeholderImage: nil) self.bookImage.sd_setImage(with: URL(string: self.book.image), placeholderImage: nil) let view = UIView(fr

我正在尝试向UIImageView添加渐变

viewDidLoad() {
    self.bookImageBig.sd_setImage(with: URL(string: self.book.image), placeholderImage: nil)
    self.bookImage.sd_setImage(with: URL(string: self.book.image), placeholderImage: nil)
    
    let view = UIView(frame: bookImageBig.frame)

    let gradient = CAGradientLayer()
    gradient.frame = view.frame
    gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor]
    gradient.locations = [0.0, 1.0]
    view.layer.insertSublayer(gradient, at: 0)
    bookImageBig.addSubview(view)
    bookImageBig.bringSubviewToFront(view)
    
我正在尝试向BookImageView添加渐变

viewDidLoad() {
    self.bookImageBig.sd_setImage(with: URL(string: self.book.image), placeholderImage: nil)
    self.bookImage.sd_setImage(with: URL(string: self.book.image), placeholderImage: nil)
    
    let view = UIView(frame: bookImageBig.frame)

    let gradient = CAGradientLayer()
    gradient.frame = view.frame
    gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor]
    gradient.locations = [0.0, 1.0]
    view.layer.insertSublayer(gradient, at: 0)
    bookImageBig.addSubview(view)
    bookImageBig.bringSubviewToFront(view)
    
但是,梯度仅部分覆盖图像。30像素的图像不被渐变覆盖。该图像已添加到故事板,并在视图控制器中引用。
有人能帮忙吗?

用边框代替边框

gradient.frame = self.bookImageBig.bounds

对于帧和边界差异,请查看此

,而不是帧使用边界

gradient.frame = self.bookImageBig.bounds

对于帧和边界的差异,请注意这一点

不仅会混淆帧和边界,而且还会隐藏代码运行的时间,这一点至关重要。如果在
viewDidLoad
中运行它,那就不好了。@matt我在viewDidLoad中运行它。我应该在哪里运行它?在第一个
viewdilayoutsubviews
之后。在那之前,尺寸都不合适。请读@matt,我仍然很困惑。如果在多次调用viewDidLayoutSubviews和viewDidLayoutSubviews之后必须调用它,您将在何处调用它?您可以在
viewDidLayoutSubviews
中执行此操作,并使用Bool实例属性,这样您就知道这是第一次。您不仅混淆了帧和边界,而且还隐藏了此代码运行的时间,这一点至关重要。如果在
viewDidLoad
中运行它,那就不好了。@matt我在viewDidLoad中运行它。我应该在哪里运行它?在第一个
viewdilayoutsubviews
之后。在那之前,尺寸都不合适。请读@matt,我仍然很困惑。如果在多次调用viewDidLayoutSubviews和viewDidLayoutSubviews之后必须调用它,您将在何处调用它?您在
viewDidLayoutSubviews
中执行此操作,并使用Bool实例属性,因此您知道这是第一次。这不起作用。你还有其他建议吗?你能分享这个演示项目吗?这里是不起作用的代码。你还有其他建议吗?你能分享演示项目吗?下面是代码