我给uiimageview手势添加单击手势为什么没有反应,直接上码

给UIImageView增加点击事件
自己做了一个九宫格,里面的图标都是由多张图片重叠构成,然后包装成一个button来使用; 遇到的问题是如何给这个button增加点击事件? 解决思路1:网友提示在该button上增加一个真正的透明button,这样就可以顺利执行点击事件了;但是本人尝试发现,如果我调
自己做了一个九宫格,里面的图标都是由多张图片重叠构成,,然后包装成一个button来使用;
遇到的问题是如何给这个&button&增加点击事件?
解决思路1:网友提示在该&button&上增加一个真正的透明button,,这样就可以顺利执行点击事件了;但是本人尝试发现,如果我调整了button的透明度后,点击是没有效果的!可能是我操作错误,,待再次验证。
解决思路2:为UIImageView增加手势
[ImageView&addGestureRecognizer:我们自己的手势recognizer];
如何创建一个手势?看看UITapGestureRecognizer&的用法吧
&//单指单击
&UITapGestureRecognizer&*singleFingerOne&=&[[UITapGestureRecognizer&alloc]&initWithTarget:self
&action:@selector(handleSingleFingerEvent:)];
&singleFingerOne.numberOfTouchesRequired&=&1;&//手指数
&singleFingerOne.numberOfTapsRequired&=&1;&//tap次数
&singleFingerOne.delegate=&
&//单指双击
&UITapGestureRecognizer&*singleFingerTwo&=&[[UITapGestureRecognizer&alloc]&initWithTarget:self
&action:@selector(handleSingleFingerEvent:)];
&singleFingerTwo.numberOfTouchesRequired&=&1;
&singleFingerTwo.numberOfTapsRequired&=&2;
&singleFingerTwo.delegate=&
&//双指单击
&UITapGestureRecognizer&*doubleFingerOne&=&[[UITapGestureRecognizer&alloc]&initWithTarget:self
&action:@selector(handleDoubleFingerEvent:)];
&doubleFingerOne.numberOfTouchesRequired&=&2;
&doubleFingerOne.numberOfTapsRequired&=&1;
&doubleFingerOne.delegate=&
&UITapGestureRecognizer&*doubleFingerTwo&=&[[UITapGestureRecognizer&alloc]&initWithTarget:self
&action:@selector(handleDoubleFingerEvent:)];
&doubleFingerTwo.numberOfTouchesRequired&=&2;
&doubleFingerTwo.numberOfTapsRequired&=&2;
&doubleFingerTwo.delegate=&
&//如果不加下面的话,当单指双击时,会先调用单指单击中的处理,再调用单指双击中的处理
&[singleFingerOne&requireGestureRecognizerToFail:singleFingerTwo];
&//同理双指亦是如此
&[doubleFingerOne&requireGestureRecognizerToFail:doubleFingerTwo];
&[self.view&addGestureRecognizer:singleFingerOne];
&[self.view&addGestureRecognizer:singleFingerTwo];
&[self.view&addGestureRecognizer:doubleFingerOne];
&[self.view&addGestureRecognizer:doubleFingerTwo];
&[singleFingerOne&release];
&[singleFingerTwo&release];
&[doubleFingerOne&release];
&[doubleFingerTwo&release];
处理事件的方法,代码:
&//处理单指事件
-&(void)handleSingleFingerEvent:(UITapGestureRecognizer&*)sender
if(sender.numberOfTapsRequired&==&1)&{
//单指单击
NSLog(@"单指单击");
&}elseif(sender.numberOfTapsRequired&==&2){
//单指双击
NSLog(@"单指双击");
&//处理双指事件
&-&(void)handleDoubleFingerEvent:(UITapGestureRecognizer&*)sender
&if(sender.numberOfTapsRequired&==&1)&{
&//双指单击
&NSLog(@"双指单击");
&}elseif(sender.numberOfTapsRequired&==&2){
&//双指双击
&NSLog(@"双指双击");
你最喜欢的iOS 问题:UIView 中 有个 UIImageView。如果如果我在 UIView 中 touchMove,如果刚好move到 UIImageView的那个区域, UIImageView能感应到手指划过么? -
UIView 中 有个 UIImageView。如果如果我在 UIView 中 touchMove,如果刚好move到 UIImageView的那个区域, UIImageView能感应到手指划过么?
共有 4 个回答
不能,需要设置一个属性。让UIImageView的属性userInteractionEnabled等于YES。看看行不?
登录后方可回复
如果设置了
我手指从外层view中触摸,然后移动过那张图片的时候,图片能否感应到那个事件?
登录后方可回复
在touchMoved中 拿到 [[touches anyObject] locationInView:imageView].x
和y 看是否在imageView的frame里试试
登录后方可回复
You can pass the touch event by yourself. First of all, you need to add the implement the touch event delegate of the UIView first
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
[imageView touchesBegan:touches withEvent:event];
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
[imageView touchesMoved:touches withEvent:event];
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
[imageView touchesEnded:touches withEvent:event];
登录后方可回复
登录后方可回答
耗时 0.0980 秒如何给uiimageview添加点击事件_百度知道
如何给uiimageview添加点击事件
提问者采纳
&#47.numberOfTouchesRequired = 1;&#47.view addGestureR
doubleFingerO/
&#47,这样就可以顺利执行点击事件了;单指单击的NSLog(@“单指单击”);/&#47: /手指数 singleFingerO同理双指亦是如此
[doubleFingerOne requireGestureRecognizerToF如果不加下面的话;
UITapGestureRecognizer * doubleFingerTwo = [[UITapGestureRecognizer页头] initWithTarget.numberOfTapsRequired == 1){
&#47.numberOfTouchesRequired = 2:@selector(handleDoubleFingerEvent :singleFingerTwo]
[self。doubleFingerTwo 委托 =自我; ;
singleFingerTwo:doubleFingerTwo]
[singleFingerOne发布]
[singleFingerTwo发布]
[doubleFingerOne发布]
[doubleFingerTwo发布]处理事件的方法; } 否则如果(/&#47.numberOfTapsRequired = 1;
singleFingerTwo。解决思路2:我们自己的手势识别 ]如何创建一个手势; :@selector(handleSingleFingerE&#47:doubleFingerOne]
doubleFingerT
doubleFingerT
&#47:@selector(handleSingleFingerEvent :)] singleFingerOne:网友提示在该“button”上增加一个真正的透明button.view addGestureRecognizer:(UITapGestureRecognizer *)发件人
如果(sender.numberOfTapsRequired = 2:doubleFingerTwo]
[self.view addGestureR
doubleFingerO单指单击 UITapGestureRecognizer * singleFingerOne = [[UITapGestureRecognizer页头] initWithTarget:(UITapGestureRecognizer *)发件人 { 如果(sender,当单指双击时;处理双指事件
- (无效)handleDoubleFingerEvent.numberOfTapsRequired == 1){ //双指单击
UITapGestureRecognizer * doubleFingerOne = [[UITapGestureRecognizer页头] initWithTarget:自 操作;抽头次数singleFingerOne 委托 =自我;单指双击的NSLog(@“单指双击”);
} 否则如果(sender.numberOfTapsRequired = 1:自操作:@selector(handleDoubleFingerE处理单指事件 - (无效)handleSingleFingerEvent。doubleFingerOne 委托 =自我?看看UITapGestureRecognizer的用法吧 &#47,代码:)];单指双击 UITapGestureRecognizer * singleFingerTwo = [[UITapGestureRecognizer页头] initWithTarget,如果我调整了button的透明度后,会先调用单指单击中的处理;但是本人尝试发现.numberOfTapsRequired == 2){ &#47:)];&#47:自 操作.view addGestureRecognizer.numberOfTouchesRequired = 1;&#47:singleFingerTwo]
&#47.numberOfTapsRequired == 2){
&#47给的UIImageView增加点击事件解决思路1;双指双击 的NSLog(@“双指双击”)!可能是我操作错误:)]:singleFingerOne]
&#47,再调用单指双击中的处理
[singleFingerOne requireGestureRecognizerToF&#47。singleFingerTwo 委托 =自我,待再次验证;双指单击 的NSLog(@“双指单击”);&#47:自 操作.numberOfTapsRequired = 2:为的UIImageView增加手势[ImageView的addGestureRecognizer.numberOfTouchesRequired = 2; ; &#47,点击是没有效果的
资深电脑人
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁IOS学习笔记18―UIImageView
以前我们使用过UIImage来加载图片,而UIImageView是在界面上显示图片的一个控件,在UIImageView中显示图片的话应该首先把图片加载到UIImage中,然后通过其他方式使用该UIImage。以下说明了四种常用的加载UIImage的方法:
imageNamed:使用应用程序束中的一个文件来创建,4以后的版本中可以省略图片扩展名;
imageWithCGImage:使用Quartz 2D对象创建UIImage,与initWithCGImage等效;
imageWithContentsOfFile:根据指定的路径创建UIImage,与initWithContentOfFile等效;
imageWithData:使用NSData创建,与initWithData等效;
另外,为支持iphone4之后的Retina显示屏,根据文件名后缀来加载最匹配的图像,例如有两个包含相同图标的文件,一个是标准的,一个是用于Retina屏幕显示的,标准命名为icon.png,而HD版本命名为icon@2x.png,加载期间,UIImage会自动去匹配需要加载的图像,如果没有HD版本的图像,UIImage会加载标准的图像文件并将其放大到合适高分辨率的显示屏。
创建UIImageView有两种方法,一种是通过之前提到的用UIImage来加载:
UIImage *image = [UIImageimageNamed:@&picture&];
UIImageView *imageView = [[UIImageViewalloc] initWithImage:image];
另一种是通过initWithFrame:来加载,然后手工修改UIImageView的属性。
animationDuration:属性,指定动画持续的时间;
animationImages:属性,是一个NSArray,包含要加载到UIImageView中的图像;
animationRepeatCount:属性,指定动画播放多少次,不指定为无限循环播放;
image:属性,指定一个要加载的图像;
startAnimating:方法,开始播放动画;
stopAnimating:方法,停止播放动画;
下面来构建一个幻灯片的应用:
首先看看完成后整体工程目录截图:
首先准备三张图片,拖放到工程中,然后打开ViewController.m文件并修改代码:
- (void)viewDidLoad&
&&& [superviewDidLoad];&
// Do any additional setup after loading the view, typically from a nib.&
&&& UIImage *img1 = [UIImage imageNamed:@&img&];&
&&& UIImage *img2 = [UIImage imageNamed:@&img1&];&
&&& UIImage *img3 = [UIImage imageNamed:@&img2&];&
&&& UIImageView *imageView = [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen]& bounds]];&
&&& imageView.animationImages = [NSArray arrayWithObjects:img1,img2,img3, nil];&
&&& imageView.animationDuration = 5;&
&&& [imageView startAnimating];&
&&& [self.viewaddSubview:imageView];&
&&& [imageView release];&
编译运行后,可以看到屏幕上的三张图片在不断来回切换:
下面来看看使用Core Graphics来绘制简单图像,通过UIImage不能访问整个Core Graphics库,但也提供了5个方法来像Core Graphics那样工作:
drawAsPatternInRect:在矩形内绘制图像,图像不缩放,必要时将平铺
drawAtPoint:在左上角位于CGPoint指定位置开始绘制图像
drawAtPoint:blendMode:alpha:drawAtPoint的复杂版本,可以指定图片透明度等
drawInRect:在CGRect内绘制图像,并相应的缩放
drawInRect:blendMode:alpha:drawInRect的复杂版本
有一个问题是,不能在viewDidLoad:或其他通常来加载对象的方法中使用这些方法,因为他们依赖于图形上下文,图形上下文是绘画的目的地,好比窗口等。在iphone和ipad中,UIView自动在CALayer中创建一个图形上下文,CALayer是与每个UIView相关联的Core Animation层,要访问的话可以建立UIView的子类并重写drawRect:方法。
建立CustomUIImageView并继承UIView,然后重写drawRect方法,代码如下:
#import &CustomUIImageView.h&&
@implementation CustomUIImageView&
- (id)initWithFrame:(CGRect)frame&
&&& self = [superinitWithFrame:frame];&
&&& if (self) {&
&&&&&&& // Initialization code&
&&&&&&& [self drawRect:frame];&
// Only override drawRect: if you perform custom drawing.&
// An empty implementation adversely affects performance during animation.&
- (void)drawRect:(CGRect)rect&
&&& UIImage *img1 = [UIImage imageNamed:@&img&];&
&&& UIImage *img2 = [UIImage imageNamed:@&img1&];&
&&&&&&&& UIImage *img3 = [UIImage imageNamed:@&img2&];&
&&&& //这里使用了混合模式,正常和透明度为50%&
&&& [img1 drawAtPoint:CGPointMake(0, 0) blendMode:kCGBlendModeNormalalpha:.5];&
&&& [img2 drawInRect:CGRectMake(50, 50, 150, 150)];&
&&& [img3 drawInRect:CGRectMake(140, 140, 150, 150)];&
使用的话在ViewController.m文件中添加如下代码即可:
CustomUIImageView *customImageView = [[CustomUIImageView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];&
[self.view addSubview:customImageView];&
编译运行结果如下:
使用该方法可以构建更复杂的功能,如混合图片,类似PS中的功能,如颜色加深和强光以及让图片部分透明,这些方法都可以实现。相比于之前创建多个UIImageView对象,使用单个drawRect:方法更方便和容易。
作者:tangren03
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。}

我要回帖

更多关于 uiimageview圆角 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信