【发布时间】:2015-01-05 22:48:08
【问题描述】:
我在 UIView 对象上有一个 UILongGestureRecognizer。
当用户握住手指 1 秒时,我在他们握住手指的位置绘制另一个 UIView(彩色框)。
这个新绘制的 UIView 附加了一个 UIPanGestureRecognizer。
但是,为了让 UIPanGestureRecognizer 开始,需要重新点击屏幕。似乎如果我的手指已经被按下,它不会开始接收输入,直到我再次按下它。
我希望用户按住手指,创建框,然后拖动该框(而不必再次点击框然后开始拖动它)。
如果在创建 UIView 时,您知道如何预激活 UIPanGestureRecognizer 以从顶部的手指按下开始?
这是我的拖动视图代码
public func performDrag(recoginizer:UIPanGestureRecognizer)
{
if(!_drag)
{
return
}
let point = recoginizer.translationInView(_dragView!)
switch(recoginizer.state)
{
case UIGestureRecognizerState.Began:
_initialPositionBeforeDragStarted = CGPoint(x: self.frame.origin.x, y: self.frame.origin.y)
case UIGestureRecognizerState.Ended:
_initialPositionBeforeDragStarted = nil
if(_didMoveFinishedCallback != nil)
{
_didMoveFinishedCallback()
return
}
case UIGestureRecognizerState.Changed:
frame.origin.x = _initialPositionBeforeDragStarted.x + point.x
if (frame.origin.x + frame.width > _dragView!.frame.width)
{
frame.origin.x = _dragView!.frame.width - frame.width
}
if(frame.origin.x < 0)
{
frame.origin.x = 0
}
frame.origin.y = _initialPositionBeforeDragStarted.y + point.y
if (frame.origin.y + frame.height > _dragView!.frame.height)
{
frame.origin.y = _dragView!.frame.height - frame.height
}
if(frame.origin.y < 0)
{
frame.origin.y = 0
}
default:
println("Error: Default hit in perform drag")
}
if(_didMoveCallback != nil)
{
var globalPoint = window!.convertPoint(frame.origin, fromView: self.superview)
_didMoveCallback(globalPoint)
}
}
【问题讨论】:
-
可能你不能。我认为 UILongPressGestureRecognizer 应该处理拖动。
标签: ios swift uiview uipangesturerecognizer