标签: uigesturerecognizer

UIButton PanGesture 走出屏幕

我已经构建了一个小型测试应用程序来在 UIButton 上应用平移手势。我成功应用了平移手势并成功移动了按钮。但问题是我什至可以在屏幕外移动按钮。如何将其绑定为仅在 iPhone 屏幕内移动?这是我的代码:

    - (void)viewDidLoad
{
    [super viewDidLoad];

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
    [panGesture setMinimumNumberOfTouches:1];
    [_shareButton addGestureRecognizer:panGesture];
}

-(IBAction)pan:(UIPanGestureRecognizer *)recognizer
{
    CGPoint trans =[recognizer translationInView:self.view];
    recognizer.view.center = CGPointMake(recognizer.view.center.x+trans.x, recognizer.view.center.y+trans.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];


}
Run Code Online (Sandbox Code Playgroud)

如何限制按钮移出屏幕?我使用的是 iOS 7,xcode 5.0。

uigesturerecognizer ios

0
推荐指数
1
解决办法
1882
查看次数

为什么我的UILongPressGestureRecognizer不起作用?

我有以下代码,我的长按不按预期方式工作.任何人都可以弄清楚它为什么不起作用?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "myButton:")
    longPressRecognizer.minimumPressDuration = 0.5
    myButton.addGestureRecognizer(longPressRecognizer)
}

@IBOutlet weak var myButton: UIButton!

@IBAction func myButton(longPress: UILongPressGestureRecognizer) {

    if longPress.state != .Began {

        presentAlertController()

        return
    }
}
Run Code Online (Sandbox Code Playgroud)

当我按住按钮时出现此错误

2016-01-09 00:41:28.785 longPressTest[1870:551106] Warning: Attempt to present <UIAlertController: 0x144d6a500>  on <longPressTest.ViewController: 0x144e3a450> which is already presenting <UIAlertController: 0x144e59d80>
2016-01-09 00:41:28.903 longPressTest[1870:551106] Attempting to load the view of a view …
Run Code Online (Sandbox Code Playgroud)

uigesturerecognizer ios swift

0
推荐指数
1
解决办法
443
查看次数

UITableView 上的长按手势

我一直在尝试在我的 uitableview 上设置一个长按手势识别器。我已经能够注册它,但是它似乎为我提供了不正确的相关行信息。我的 tableview 在正常单击时按预期工作,它通过indexPath.row,我能够从people与该行相关联的数组中获取正确的记录。但是在使用下面的代码时,indexPath.row 似乎不一致并选择上方和下方的行,然后在滚动时长按选择随机记录。

func longPress(_ longPressGestureRecognizer: UILongPressGestureRecognizer) {

    if longPressGestureRecognizer.state == UIGestureRecognizerState.began {

        let touchPoint = longPressGestureRecognizer.location(in: self.view)
        if let indexPath = tableView.indexPathForRow(at: touchPoint) {
            let person = people[indexPath.row]
            print("\(person.name)")
            ///////works but erratic responses//////////
        }
    }
}

//// in view did load i have this


    let longPressGesture:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(PeopleVC.longPress(_:)))
    longPressGesture.minimumPressDuration = 1.0 // 1 second press
    longPressGesture.delegate = self
    self.tableView.addGestureRecognizer(longPressGesture)
Run Code Online (Sandbox Code Playgroud)

uigesturerecognizer ios swift

0
推荐指数
1
解决办法
4049
查看次数

橡皮筋效果如何实现?

我在网上找到了这段代码,它在平移视图时实现了橡皮筋效果:

@IBAction func viewDragged(sender: UIPanGestureRecognizer) {

  let yTranslation = sender.translationInView(view).y
    if (hasExceededVerticalLimit(topViewConstraint.constant)){
      totalTranslation += yTranslation
      topViewConstraint.constant = logConstraintValueForYPoisition(totalTranslation)
    if(sender.state == UIGestureRecognizerState.Ended ){
       animateViewBackToLimit()
    }
    } else {
      topViewConstraint.constant += yTranslation
    }
     sender.setTranslation(CGPointZero, inView: view)
 }

 func logConstraintValueForYPoisition(yPosition : CGFloat) -> CGFloat {
  return verticalLimit * (1 + log10(yPosition/verticalLimit))
 }
Run Code Online (Sandbox Code Playgroud)

最终效果如下图所示:

在此输入图像描述

但是,我很难理解这段代码的工作原理,也无法在我自己的项目中重现这种效果。例如,我不明白的一件事是,当向上平移绿色视图时yTransition将为负数,并且负数没有对数(在方法中logConstraintValueForYPoisition(:))。如果有人能向我解释这段代码是如何逐步工作的,我将非常感激。

原始帖子可以在这里找到。

uigesturerecognizer ios swift

0
推荐指数
1
解决办法
2096
查看次数

如何在TableView中添加向左滑动手势并在Swift 3中滑动时返回单元格位置

我有一个TableView,它已被编码为在使用该didSelectRowAt方法选择的任何单元格时执行操作.

现在,我想向表格(或单元格)添加一个向左滑动手势,这样我可以在滑动单元格时执行辅助操作,而不是轻敲单元格.

1)我希望细胞在滑动时向左移动,但我不想在细胞移动的空间中添加按钮.

2)相反,我希望能够将单元格"拖动"到某个点(比如说中途),然后用indexPath执行辅助操作(所以我知道哪个单元被拖动).

3)如果用户停止拖动或放开单元格,我希望它返回到它的起始位置并且不会发生任何操作.

我已经看过很多样本可以做各种各样的部分但是大多数都在Obj-C中,或者在与单元格相同的行中插入按钮.

另外,将Gesture添加到每个单元格中会更好吗?将它添加到表中似乎更聪明......

编辑:请参阅下面的代码完整答案

uitableview uigesturerecognizer ios swift3

0
推荐指数
1
解决办法
5899
查看次数

如何像Tinder投票一样拖动控制?(见图)

显然有一个uiimage视图和uilabel的视图.

如何使拖动理解向右移动以实现正面投票并向左移动负面投票?

在此输入图像描述

在此输入图像描述

火种

cocoa-touch uigesturerecognizer ios

-1
推荐指数
1
解决办法
8739
查看次数

UIPanGestureRecognizer不起作用

这很奇怪,但当我添加UIPanGestureRecognizer一个视图时,它不起作用.这是我的观点,白色视图是红色视图的子视图:

在此输入图像描述

主要观点:

@IBOutlet weak var redView: UIView!
@IBOutlet weak var whiteView: UIView!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let panRecognizer = UIPanGestureRecognizer(target:self, action:#selector(ViewController.handlePan))
    whiteView.gestureRecognizers = [panRecognizer]        
}


func handlePan(recognizer:UIPanGestureRecognizer)  {
    //foo
}
Run Code Online (Sandbox Code Playgroud)

当我点击并拖动白色视图时,它将不会移动.

uigesturerecognizer uipangesturerecognizer swift

-1
推荐指数
1
解决办法
3076
查看次数

在ARkit中旋转对象

我的场景中有一个对象,当我在屏幕上移动手指时,我希望该对象沿该方向旋转。它是屏幕上的杯子,在屏幕上滑动手指可以使立方体绕中心点旋转,但不能移动杯子的位置。只要他们积极刷卡,它就应该旋转

objective-c uigesturerecognizer ios arkit

-1
推荐指数
1
解决办法
2355
查看次数