【问题标题】:How to change UIButton without reset position?如何在不重置位置的情况下更改 UIButton?
【发布时间】:2018-01-13 06:55:17
【问题描述】:

我做了一个可拖动的按钮

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

【问题讨论】:

  • 我试过了,效果很好

标签: ios swift uibutton swift4 uipangesturerecognizer


【解决方案1】:

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

【讨论】:

  • 我也试过了,当我拖动到原点小于 100 时,它会更新图像并且按钮的框架没有重置到其原始位置。您能否添加任何示例图像,以便我可以清楚地了解问题。
  • 视频可以吗?我录制了一个视频。 https://streamable.com/43jar,图片和背景图是一样的。
  • 我也试试这个,https://streamable.com/uk1dz,即使我将图像设置为其他按钮,它仍然会重置位置。第一个视频我用setImage,第二个视频我用setBackgroundImage,你可以看到他们没有什么不同
【解决方案2】:

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

  1. 取消设置图像,将按钮设为空白,其中没有图形
  2. 为初始状态和第二状态创建新的 UIImageView,包括您的 UIImages
  3. 在 viewDidLoad() 中的 UIViewController 中设置 UIImageView。bounds = UIButton.bounds设置初始图片
  4. 调用UIButton.addSubview(UIImageView)
  5. 在您使用 UIButton.setImage() 的方法中调用 UIImageView。image = 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
           }

       }
    }

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

【讨论】:

    猜你喜欢
    • 2013-11-19
    • 2011-04-29
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多