【问题标题】:UIView's background color doesn't update when pannedUIView 的背景颜色在平移时不更新
【发布时间】:2021-10-30 23:08:21
【问题描述】:

我目前正在构建一个颜色选择器应用程序,该应用程序将从用户的图像中选择一种颜色。
我的选择器视图的背景颜色现在设置为 .clear 但我希望用它指向的颜色填充它。

My current picker view What I wish to make
My curent picker view What I wish to make

但是,在平移选取器视图时,背景颜色不会更新。
这很奇怪,因为更新边框颜色有效。
我有这样的东西。('var color' 的值是从 superview 注入的)
背景颜色不更新有什么原因吗?
提前非常感谢! :)

protocol ColorPickerDelegate {
   func didMoveImagePicker(_ view: ColorPickerView, didMoveImagePicker location: CGPoint)
}

final class ColorPickerView: BaseView {
   //MARK:- View
   private var borderView: UIView = {
      let view = UIView()
      view.layer.borderWidth = 4
      view.layer.borderColor = UIColor.white.cgColor
      view.layer.cornerRadius = 20
      return view
   }()

   //MARK:- Properties
   var color: UIColor?
   var delegate: ColorPickerDelegate?
   ...
   
   //MARK:- Override BaseView
   override func setInit() {
      bounds.size = CGSize(width: 40, height: 40)
      let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(panColorPicker(_:)))
      addGestureRecognizer(panGestureRecognizer)
      ...
   }

   ...

   @objc func panColorPicker(_ sender: UIPanGestureRecognizer) {
      delegate?.didMoveImagePicker(self, didMoveImagePicker: CGPoint(x: center.x, y: center.y))
      // borderView.layer.borderColor = color?.cgColor : this code changes the color of the border when the view is panned
      borderView.backgroundColor = color // this code even stops updating the variable 'color'
   }
   
}

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    UIView 的内容缓存在其图层中。如果您更改背景颜色,则必须告诉视图重绘。尝试添加对setNeedsDisplay()的呼叫

    @objc func panColorPicker(_ sender: UIPanGestureRecognizer) {
         delegate?.didMoveImagePicker(self, didMoveImagePicker: CGPoint(x: center.x, y: center.y))
         // borderView.layer.borderColor = color?.cgColor : this code changes the color of the border when the view is panned
         borderView.backgroundColor = color // this code even stops updating the variable 'color'
         borderView.setNeedsDisplay()
    }
    

    【讨论】:

    • 感谢您的想法,但不幸的是,setNeedsDisplay 没有解决问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多