我想要实现是,当用户触摸UIImageView时设置Image1,当用户抬起他的手指时设置Image2。
我只能获取UIGestureRecognizerState。以以下代码结束
var tap = UITapGestureRecognizer(target: self, action: Selector("tappedMe:"))
imageView.addGestureRecognizer(tap)
imageView.userInteractionEnabled = true
func tappedMe(gesture: UITapGestureRecognizer)
{
if gesture.state == UIGestureRecognizerState.Began{
imageView.image=originalImage
dbgView.text="Began"
}else if gesture.state == UIGestureRecognizerState.Ended{
imageView.image=filteredImage
dbgView.text="Ended"
}else if gesture.state == UIGestureRecognizerState.Cancelled{
imageView.image=filteredImage
dbgView.text="Cancelled"
}else if gesture.state == UIGestureRecognizerState.Changed{
imageView.image=filteredImage
dbgView.text="Changed"
}
}
3条答案
按热度按时间fquxozlt1#
UITapGestureRecognizer不会将其状态更改为
.Began
,但UILongPressGestureRecognizer会。如果您出于某种原因希望字体直接覆盖触摸回调,则可以使用带有非常短的minimumPressDuration
(如0.1)的UILongPressGestureRecognizer来实现此效果。@Daij-Djan的示例:
8e2ybdfx2#
解决方案如下:
**注意:**将其放入UIView子类中并添加:
userInteractionEnabled = true
在初始化块内yfwxisqw3#
最好也是最实用的解决方案是将
UIImageView
嵌入到UIControl
子类中。默认情况下,
UIImageView
启用了用户交互。如果您创建了一个简单的UIControl
子类,您可以很容易地将图像视图添加到其中,然后使用以下方法来实现您想要的效果:这样做的好处是,您可以访问所有不同的触摸事件,节省您的时间,从必须检测他们自己。
根据您要执行的操作,您还可以覆盖
var highlighted: Bool
或var selected: Bool
以检测用户何时与图像交互。最好是这样做,这样用户在使用应用中的所有控件时都能获得一致的用户体验。
一个简单的实现如下所示: