从 class 外部更改惰性按钮的不透明度

Change lazy button opacity from outside of the class

我需要在另一个 class 中更改按钮的 alpha 值。但问题是按钮创建为“惰性变量”,所以我无法更改该值。

lazy var middleButton: UIButton = {
    let button = UIButton(type: .custom)
    button.frame.size = CGSize(width: 56, height: 56)
    button.layer.cornerRadius = button.frame.width / 2
    button.layer.masksToBounds = true
    button.backgroundColor = .white
    button.setImage(UIImage(named: "iconBasket"), for: .normal)
    button.contentMode = .center
    button.imageView?.contentMode = .scaleAspectFit
    button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    button.addTarget(self, action: #selector(btnBasketClicked))
    addSubview(button)
    return button
}()

当视图滚动时,我希望此按钮的 alpha 为 0.2。这是代码

extension ProductListView: UIScrollViewDelegate{
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.panGestureRecognizer.translation(in: scrollView).y < 0{
        // alpha = 0.2
        MyTabBar.shared.scrollDown()

    }
    else{
         // alpha = 1.0
         MyTabBar.shared.scrollUp()
        }
    }

}

    func scrollDown(){
    middleButton.alpha = 0.2
}

我试了很多方法都不行。在“layoutSubviews()”中调用“addSubView()”函数解决了我的问题,但这导致了另一个问题,我的函数“basketButtonClicked()”没有被调用。我使用了委托模式,这里是。

protocol BasketButtonDelegate: class {
func basketButtonClicked()

}

@objc private func btnBasketClicked(_ sender: UIButton!){
    
    delegate?.basketButtonClicked()
}

override func layoutSubviews() {
    super.layoutSubviews()
    addSubview(middleButton)
}

当我在“layoutSubviews()”中调用“addSubView”函数时,“basketbuttonClicked”从未被调用。

extension TabCoordinator : BasketButtonDelegate
{
    func basketButtonClicked(){
        log.debug("basketButtonClicked")
        let coor = CartCoordinator(navigationController, hidesBar: true)
        childCoordinators.append(coor)
        coor.start()
    }
}

(我分配了委托,所以问题不在于此。)

有点复杂,但我希望我们能弄明白。

您需要向 MyTabBar class 添加协议。应该是这样

class MyTabBar {
    static var shared = MyTabBar()
    weak var delegate : abc?
    func scrollDown(){
        delegate?.xyz()
    }
 }

 protocol abc : AnyObject {
     func xyz()
 }

在你的 class

class btnView : UIView , abc{
lazy var middleButton: UIButton = {
    let button = UIButton(type: .custom)
    button.frame.size = CGSize(width: 56, height: 56)
    button.layer.cornerRadius = button.frame.width / 2
    button.layer.masksToBounds = true
    button.backgroundColor = .red
    button.contentMode = .center
    button.imageView?.contentMode = .scaleAspectFit
    button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    button.addTarget(self, action: #selector(btnBasketClicked), for: .touchUpInside)
    return button
}()

required init?(coder: NSCoder) {
    super.init(coder: coder)

}
override init(frame: CGRect) {
    super.init(frame: frame)
}
@objc func btnBasketClicked(){
    print("Im here")
}

func addMiddleButton(){
    self.addSubview(middleButton)
}

func alphaaa(){
    self.middleButton.alpha = 0.2
}

func xyz() {
    self.alphaaa()
}

}

最后,在您的 ProductListView 中创建您的视图的实例,或者如果您使用自动布局添加,只需调用 viewDidLoad

中的 2. 函数
    var viewwww = btnView(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
    viewwww.addMiddleButton() // call to add btn to custom view

和扩展

func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.panGestureRecognizer.translation(in: scrollView).y < 0{
    // alpha = 0.2
    MyTabBar.shared.delegate = viewwww
    MyTabBar.shared.scrollDown()

}
else{
     // alpha = 1.0
     MyTabBar.shared.scrollUp()
    }
}