我正在开发一个应用程序来显示一个UIImages使用a 的画廊UIScrollView,我的问题是,如何点击zoom并双击zoom,如何处理时它是如何工作的UIScrollView.
我正在构建一个iPhone应用程序,让用户重新排列屏幕上的一些UI元素.
如何在同一个UIView中添加点击手势识别器和长按手势识别器?当我从长按中抬起手指时,轻敲手势识别器会触发.如何在用户执行长按时暂时禁用轻敲手势识别器或阻止其触发?
谢谢!
我试着做一个简单的敲击手势,我无法弄明白.我想为手势添加一个目标,简单的选择器.
这是我的代码:
var panGesture : UIGestureRecognizer = UITapGestureRecognizer.addTarget(<#UIGestureRecognizer#>)
Run Code Online (Sandbox Code Playgroud)
我该如何设置选择器?
我的手势有些麻烦.
我试图在同一个按钮上同时使用水龙头和长按,所以我已经习惯了
@IBAction func xxx (sender: UITapGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)
和
@IBAction func xxx (sender: UILongPressGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)
但是当我点击时,我的按钮似乎对这两个功能做出了反应.可能有什么问题?
func long(longpress: UIGestureRecognizer){
if(longpress.state == UIGestureRecognizerState.Ended){
homeScoreBool = !homeScoreBool
}else if(longpress.state == UIGestureRecognizerState.Began){
print("began")
}
}
Run Code Online (Sandbox Code Playgroud) 我想要的是一个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
在我的一个视图控制器中,我有几个包含UITapGestureRecognizer的视图,以及一个实现touchesBegan.我需要优先使用水龙头,touchesBegan所以我将delaysTouchesBegan手势识别器的属性设置为YES.这是正常的,但有一个问题:手势识别器延迟touchesBegan太久.根据文件:
当属性的值为YES时,窗口会暂停UITouchPhaseBegan阶段中触摸对象到视图的传递.如果手势识别器随后识别其手势,则丢弃这些触摸对象.但是,如果手势识别器无法识别其手势,则窗口会以touchesBegan:withEvent:消息(以及可能的后续touchesMoved:withEvent:消息将这些对象传递给视图,以通知其触摸的当前位置) .
问题基本上是当手势识别器不识别手势并将这些对象传递给该手势时touchesBegan,该操作花费的时间太长.无论如何加速它,还是只是处理手势以确定它是否是一个强大的并且不可能缩短?
编辑:
这里有更多信息.这是我用来设置手势识别器的代码:
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapRecognizer.cancelsTouchesInView = NO;
tapRecognizer.delaysTouchesBegan = YES;
tapRecognizer.delegate = self;
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 1;
[self.someView addGestureRecognizer:tapRecognizer];
Run Code Online (Sandbox Code Playgroud) 有容器视图和UITapGestureRecognizer上面.它还有一个子视图TTTAttributedLabel.
当我从容器视图中删除手势识别器时,委托方法 TTTAttributedLabelDelegate
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url can be called.
Run Code Online (Sandbox Code Playgroud)
当我在容器视图上添加手势识别器时.只调用其action方法.委托方法TTTAttributedLabelDelegate不会被调用.
现在我需要在我点击链接时调用委托方法TTTAttributedLabel,并在我点击容器视图的其他区域时调用action方法.
谢谢.
在我的应用中,我在运行时动态地将图像添加到我的视图中.我可以同时在屏幕上显示多个图像.每个图像都是从一个对象加载的.我在图像中添加了一个tapGestureRecongnizer,以便在点击它时调用相应的方法.
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)];
[plantImageView addGestureRecognizer:tapGesture];
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道我拍了什么图像.我知道我可以调用tapGestureRecognizer.location来获取屏幕上的位置,但这对我来说并不是很好.理想情况下,我希望能够将加载图像的对象传递到点击手势.但是,似乎我只能传递选择器名称"imageTapped:"而不是它的参数.
- (IBAction)imageTapped:(Plant *)plant
{
[self performSegueWithIdentifier:@"viewPlantDetail" sender:plant];
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道我可以将我的对象作为参数传递给tapGestureRecongnizer的方式或者我可以处理它的任何其他方式?
谢谢
布赖恩
我有一个带有单个UIView的xib,其中包含一堆图像和标签.如果我将Tap Gesture Recognizer拖到父视图上,它运行良好,但我需要添加代码来确定水龙头的位置,以便我可以正确响应点击的标签.
我认为如果我可以将Gesture Recognizers拖动到每个标签和/或图像并将IBActions连接到我响应的每个响应位置,那将会容易得多.不幸的是,我不能让这个工作.我只能从父视图中获取委托方法.
我所做的是将Tap Gesture Recognizer拖到标签上,然后将视图控制器连接为TGR的委托,并连接IBAction方法来处理tap.除了使用IBAction方法之外,我尝试了在gestureRecognizerShouldBegin:gestureRecognizer委托方法中分配目标和操作方法而没有成功.
这不应该工作,还是我只是如意思考?
谢谢你的帮助.
约翰
ios ×9
iphone ×4
objective-c ×3
swift ×3
uislider ×2
long-press ×1
selector ×1
touchesbegan ×1
uiscrollview ×1
uiview ×1
xcode ×1