swift 如何创建滑动开始按钮与移动箭头

zbdgwd5y  于 2023-08-02  发布在  Swift
关注(0)|答案(2)|浏览(172)

我想创建完全相同的滑动按钮,如https://github.com/shadowfaxtech/proSwipeButton。我想知道如何改变用户触摸按钮的箭头
我这么做是为了获得刷卡行动。

  1. let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipes(_:)))
  2. rightSwipe.direction = .right
  3. view.addGestureRecognizer(rightSwipe)

字符串
但问题是如何添加箭头到按钮,改变有用户触摸的位置。

oipij1gg

oipij1gg1#

下面是我写的用于在按钮上滑动的代码。将图像指定给图像视图。

  1. func createSwipeButton() {
  2. let button = UIButton.init(type: .custom)
  3. button.backgroundColor = UIColor.brown
  4. button.setTitle("PLACE ORDER", for: .normal)
  5. button.frame = CGRect.init(x: 10, y: 200, width: self.view.frame.size.width-20, height: 100)
  6. button.addTarget(self, action: #selector(swiped(_:event:)), for: .touchDragInside)
  7. button.addTarget(self, action: #selector(swipeEnded(_:event:)), for: .touchUpInside)
  8. self.view.addSubview(button)
  9. let swipableView = UIImageView.init()
  10. swipableView.frame = CGRect.init(x: 0, y: 0, width: 20, height: button.frame.size.height)
  11. swipableView.tag = 20
  12. swipableView.backgroundColor = UIColor.white
  13. button.addSubview(swipableView)
  14. }
  15. @objc func swiped(_ sender : UIButton, event: UIEvent) {
  16. let swipableView = sender.viewWithTag(20)!
  17. let centerPosition = location(event: event, subView: swipableView, superView: sender,isSwiping: true)
  18. UIView.animate(withDuration: 0.2) {
  19. swipableView.center = centerPosition
  20. }
  21. }
  22. @objc func swipeEnded(_ sender : UIButton, event: UIEvent) {
  23. let swipableView = sender.viewWithTag(20)!
  24. let centerPosition = location(event: event, subView: swipableView, superView: sender, isSwiping: false)
  25. UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 5, options: .curveEaseInOut, animations: {
  26. swipableView.center = centerPosition
  27. }) { _ in
  28. let halfScreenWidth = UIScreen.main.bounds.width/2
  29. if centerPosition.x > halfScreenWidth {
  30. print("button pressed action")
  31. }
  32. }
  33. }
  34. func location(event: UIEvent, subView: UIView, superView: UIButton, isSwiping: Bool) -> CGPoint {
  35. if let touch = event.touches(for: superView)?.first{
  36. let previousLocation = touch.previousLocation(in: superView)
  37. let location = touch.location(in: superView)
  38. let delta_x = location.x - previousLocation.x;
  39. print(subView.center.x + delta_x)
  40. var centerPosition = CGPoint.init(x: subView.center.x + delta_x, y: subView.center.y)
  41. let minX = subView.frame.size.width/2
  42. let maxX = superView.frame.size.width - subView.frame.size.width/2
  43. centerPosition.x = centerPosition.x < minX ? minX : centerPosition.x
  44. centerPosition.x = centerPosition.x > maxX ? maxX : centerPosition.x
  45. if !isSwiping{
  46. let normalPosition = superView.frame.size.width * 0.5
  47. centerPosition.x = centerPosition.x > normalPosition ? maxX : minX
  48. centerPosition.x = centerPosition.x <= normalPosition ? minX : centerPosition.x
  49. }
  50. return centerPosition
  51. }
  52. return CGPoint.zero
  53. }

字符串


的数据

完整的项目在github上:https://github.com/IamSaurav/SwipeButton

展开查看全部
twh00eeo

twh00eeo2#

嗯,像这样的怎么样?您可以在swipeImage var的故事板中添加UIImage。如果图像与文本颜色相同,则效果最佳。
导入UIKit

  1. @IBDesignable
  2. class UISwipeableLabel: UILabel {
  3. @IBInspectable var swipeImage: UIImage? {
  4. didSet {
  5. configureSwipeImage()
  6. }
  7. }
  8. private var swipeImageView: UIImageView?
  9. private var rightSwipe: UIPanGestureRecognizer?
  10. private var shouldActivateButton = true
  11. override func awakeFromNib() {
  12. super.awakeFromNib()
  13. configureSwipeImage()
  14. clipsToBounds = true
  15. }
  16. }
  17. private extension UISwipeableLabel {
  18. @objc func handleSwipes(_ sender:UIPanGestureRecognizer) {
  19. if let centerX = swipeImageView?.center.x {
  20. let translation = sender.translation(in: self)
  21. let percent = centerX/frame.width
  22. if sender.state == .changed {
  23. if centerX < frame.width - frame.height/2 {
  24. swipeImageView?.center.x = centerX + translation.x
  25. sender.setTranslation(CGPoint.zero, in: swipeImageView)
  26. } else {
  27. swipeImageView?.center.x = frame.width - frame.height/2
  28. if shouldActivateButton {
  29. activateButton()
  30. }
  31. }
  32. }
  33. if sender.state == .ended || sender.state == .cancelled || sender.state == .failed {
  34. if shouldActivateButton {
  35. UIView.animate(withDuration: 0.25 * TimeInterval(percent)) {
  36. self.swipeImageView?.center.x = self.frame.height/2
  37. }
  38. }
  39. }
  40. }
  41. }
  42. func configureSwipeImage() {
  43. if swipeImageView != nil {
  44. swipeImageView?.removeFromSuperview()
  45. }
  46. swipeImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: frame.height, height: frame.height))
  47. if let swipeImageView = swipeImageView {
  48. swipeImageView.image = swipeImage
  49. swipeImageView.isUserInteractionEnabled = true
  50. swipeImageView.alpha = 0.5
  51. addSubview(swipeImageView)
  52. rightSwipe = UIPanGestureRecognizer(target: self, action: #selector(handleSwipes(_:)))
  53. if let rightSwipe = rightSwipe {
  54. swipeImageView.addGestureRecognizer(rightSwipe)
  55. }
  56. }
  57. }
  58. func activateButton() {
  59. print("*** DO YOUR STUFF HERE ***")
  60. }
  61. }

字符串
您从UILabel开始,如果需要,可以将其更改为使用自动布局。

展开查看全部

相关问题