我喜欢将UILongPressGestureRecognizer与UIPanGestureRecognizer结合使用.
UIPanGestureRecognizer应该从长按开始.有一个简单的方法吗?还是我真的要写自己的手势识别器?
我不喜欢在主屏幕上.你按下一个图标,一段时间后图标开始摇晃.之后我没有从屏幕上松开手指,我可以开始拖动手指下的图标.
cocoa-touch objective-c uigesturerecognizer uipangesturerecognizer uilongpressgesturerecogni
iOS应用程序UISystemGestureGateGestureRecognizers顶级安装的标准UIView是什么?
我的应用程序包含两个视图 - 一个填充屏幕的上半部分,另一个是自定义键盘,填充下半部分.我发现空格键上的水龙头并不总是有效,经过一些调查后发现底部20像素左右的点击事件的时间与视图的其余部分不同.对于大多数视图,touchesBegan/Ended之间的时间间隔约为100ms,而空格键则为1-2ms.(我的应用程序是一个模拟器,它太快,无法检测按键).
经过一番挖掘后,我发现UIView应用程序的主要部分(即:我的主视图的超级视图)已经UISystemGestureGateGestureRecognizer安装了2个.通过删除它们在ViewDidAppear屏幕的底部不再受影响.(据推测,这些是取消触摸按键事件到我的键盘因此更快的时间).
这些系统识别器至少出现在iOS 5到7以及iPad和iPhone上.我认为它们可能与从顶部/底部滑动相关,但此功能仍然适用于删除它们.
所以我有一个修复,但我想更多地了解这里发生了什么 - 特别是我可能会通过删除这些来解决.
我有一个嵌套在一个视图控制器UINavigationController.
我已经实现了iOS 7的interactivePopGestureRecognizer,使用户可以手势将VC从堆栈中弹出.
在VC中我有一个滚动视图,当用户不在滚动视图的顶部时,我隐藏了所有的chrome(导航栏和状态栏)以将焦点放在内容上.
但是,如果隐藏了导航栏,则interactivePopGestureRecognizer将无法正常工作.
我已经尝试在它消失后启用它并验证它不是零,但它仍然不起作用.
有什么我想念的吗?
uinavigationbar uinavigationcontroller uigesturerecognizer ios7
我想要的是一个UISlider让用户不仅可以在他开始时滑动thumbRect,而且还可以在其他地方点击的时候滑动.当用户点击滑块但在滑块之外时thumbRect,滑块应跳转到该值,然后仍然保持用户的滑动手势.
到目前为止我尝试过的是在这个建议中实现UIGestureRecognizer的子类.当它thumbRect发生在外面某处的触地时,它就开始了.问题是滑块设置其值但随后进一步滑动手势被忽略,因为触摸识别器已经窃取了触摸.
如何实现滑块,您可以在任何地方点按但仍然可以立即滑动?
编辑:ali59a非常友好地添加了我现在所做的一个例子.这需要再次抬起手指,之后我可以触摸并拖动滑动(水龙头不是我想要的,我需要立即'触摸和滑动').
我创建了一个Slider(作为视频的控件,就像YouTube在底部一样)并设置最大值(持续时间)和最小值.然后用来SeekToTime改变currentTime.现在,用户可以滑动滑块的拇指来更改值
我想要实现的是让用户点击滑块上的任意位置并设置视频的当前时间.
我从这个答案中得到了一个方法,我试着将它应用到我的案例中,但是无法使它成功
class ViewController: UIViewController, PlayerDelegate {
var slider: UISlider!
override func viewDidLoad() {
super.viewDidLoad()
// Setup the slider
}
func sliderTapped(gestureRecognizer: UIGestureRecognizer) {
// print("A")
let pointTapped: CGPoint = gestureRecognizer.locationInView(self.view)
let positionOfSlider: CGPoint = slider.frame.origin
let widthOfSlider: CGFloat = slider.frame.size.width
let newValue = ((pointTapped.x - positionOfSlider.x) * CGFloat(slider.maximumValue) / widthOfSlider)
slider.setValue(Float(newValue), animated: true)
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这应该有用,但没有运气.然后我尝试在尝试将"A"打印到日志时进行调试,但事实并非显然不会进入该sliderTapped()功能.
我究竟做错了什么?或者有更好的方法来实现我想要实现的目标吗?
uislider uigesturerecognizer ios uitapgesturerecognizer swift
我在主视图中定义了多个视图.我想为所有这些视图添加单击手势.下面是我编写的代码,但这会将轻击手势注册到我添加的最后一个视图.因此,在下面的代码中,仅messagesView针对其他视图注册而不是其他视图.我有两个问题:
如何在多个视图中注册相同的tapGesture?
让我们假设我得到了这个工作,现在从这些视图中的所有单击都转到相同的函数调用oneTap.在此功能中,我如何区分水龙头来自哪个视图?
码:
@synthesize feedsView, peopleView, messagesView, photosView;
- (void)viewDidLoad
{
[super viewDidLoad];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneTap:)];
[singleTap setNumberOfTapsRequired:1];
[singleTap setNumberOfTouchesRequired:1];
[feedsView addGestureRecognizer:singleTap];
[peopleView addGestureRecognizer:singleTap];
[messagesView addGestureRecognizer:singleTap];
//[photosView addGestureRecognizer:singleTap];
[singleTap release];
return;
}
Run Code Online (Sandbox Code Playgroud) 我有一堆UIViews,如下图所示.红色/粉红色(半透明)视图位于其他视图之上.
UISwipeGestureRecognizer.UITapGestureRecognizer.
点击绿色的可见(左下)部分会触发其识别器.
点击绿色的隐藏部分不会触发其识别器(红色阻止它).
这就是问题:我希望Green能够触发.我怎样才能做到这一点?
在实践中,视图可以是任何顺序,任何数字和彼此的子视图等.但问题是相同的:
如何可靠地找到可以处理手势的最上面的视图(点击或滑动)?
我试过下面的代码.它整齐地遍历所有视图,但它失败了,因为它无法知道事件是否是滑动或点击的一部分.因此该方法始终返回红色视图.如果我从Red中删除滑动识别器,则代码可以正常工作.
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *hitView = [super hitTest:point withEvent:event];
if (hitView == self)
{
if (self.hasASwipeRecognizer)
return self; // What if this was a tap?
if (self.hasATapRecognizer)
return self;
else
return nil;
}
else
return hitView;
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一种游戏,通过长按对象本身来设置游戏对象的属性.属性的值由长按手势的持续时间确定.我正在使用UILongPressGestureRecognizer来实现这个目的,所以它是这样的:
[gameObjectView addGestureRecognizer:[[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handle:)]];
Run Code Online (Sandbox Code Playgroud)
然后是处理函数
- (void)handle:(UILongPressGestureRecognizer)gesture {
if (gesture.state == UIGestureRecognizerStateEnded) {
// Get the duration of the gesture and calculate the value for the attribute
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如何获得长按手势的持续时间?
如何使UILabel文本可编辑UILongPressGestureRecognizer.因此,在长按时它会转换为可编辑状态,并且在从uilabel移除焦点后,它变为只读.
我正在尝试启用同步手势识别,但仅适用于UIPinchGestureRecognizer和UIRotationGestureRecognizer手势.我不希望它适用于任何其他手势.如果我将以下属性设置为true,则允许同时识别所有手势,如何将其限制为仅旋转和缩放?
func gestureRecognizer(UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
Run Code Online (Sandbox Code Playgroud)