如何在不重置位置的情况下更改UIButton



>我做了一个可拖动的按钮

let buttonGesture = UIPanGestureRecognizer(target: self, action: #selector(draggedButton(_:)))
menuButton.isUserInteractionEnabled = true
menuButton.addGestureRecognizer(buttonGesture)

当按钮拖动到某个位置时,图像将被更改。

@objc func draggedButton(_ sender:UIPanGestureRecognizer){
    self.view.bringSubview(toFront: menuButton)
    let translation = sender.translation(in: self.view)
    menuButton.center = CGPoint(x: menuButton.center.x + translation.x, y: menuButton.center.y + translation.y)
    sender.setTranslation(CGPoint.zero, in: self.view)
    if(menuButton.center.x < 100){
        menuButton.setImage(UIImage(named: "newimage"), for: UIControlState.normal)
    }
}

但是在setImage之后,按钮会重置位置,如何防止这种情况?

尝试设置按钮背景图像而不是按钮图像。由于设置图像将重新缩放其位置。

我遇到了同样的问题,这是我的解决方案:

  1. 取消设置图像,将按钮设为空白,其中没有图形
  2. 创建新的 UIImageView 包括您的 UIImages,用于初始和第二状态
  3. in
  4. viewDidLoad(( in UIViewController set UIImageView.边界 = UIButton边界设置初始图像
  5. 打电话给UIButton。addSubview(UIImageView(
  6. 在使用UIButton.setImage((的方法中调用UIImageView图像 = UIImage

下面是一个示例:

    class VC : UIViewController{
       let image_initial : UIImage = UIImage("img_1")
       let image_second : UIImage = UIImage("img_2")
       let imageview_menu : UIImageView = UIImageView()
       @IBOutlet weak var button_menu: UIButton!
       override func viewDidLoad(){
           super.viewDidLoad()
           //...
           self.imageview_menu.bounds = button_menu.bounds
           self.imageview_menu.image = image_initial
           self.button_menu.addSubview(imageview_menu)
           //...
       }
       @objc func draggedButton(_ sender:UIPanGestureRecognizer){
           //...your code
           if(menuButton.center.x < 100){
              imageview_menu.image = image_second
           }
       }
    }

如果您还没有找到解决方案,希望这会有所帮助。 :)

相关内容

最新更新