如何在没有重置位置的情况下更改UIButton?

时间:2018-01-13 06:55:17

标签: ios swift uibutton swift4 uipangesturerecognizer

我制作了一个可拖动的按钮

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之后,按钮会重置位置,如何防止这种情况?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我有同样的问题,并且是我的解决方案:

  1. 取消设置图像,使按钮空白,其中没有图形
  2. 为初始和第二州创建新 UIImageView ,包括 UIImages
  3. UIViewController viewDidLoad () 设置 UIImageView 界限 = UIButton 界限 设置初始图片
  4. 致电 UIButton。 addSubview (UIImageView)
  5. 在您使用UIButton.setImage()的方法中调用 UIImageView 图像 = UIImage < / LI>

    以下是一个例子:

        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
               }
    
           }
        }
    

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