我有一个简单的动画UIImageView
,我需要检测它的点击。我添加了一个UIButton
,它是UIImageView
的子视图。然而,它的点击不工作。当添加到视图中时,我已经测试了UIButton
本身,并且它有效,所以它不是导致问题的按钮。
代码如下:
self.red = [[UIImageView alloc] initWithFrame:CGRectMake(50, 300, 85, 100)];
self.red.image = [UIImage imageNamed:@"red.png"];
[self.red setUserInteractionEnabled: YES];
[self.view addSubview: self.red];
[self.view bringSubviewToFront:self.red];
UIButton *redButton = [UIButton buttonWithType: UIButtonTypeCustom];
redButton.frame = CGRectMake(self.red.frame.origin.x, self.red.frame.origin.y, self.red.frame.size.width, self.red.frame.size.height);
[redButton addTarget: self action:@selector(correctButtonClick) forControlEvents: UIControlEventAllTouchEvents];
[redButton setUserInteractionEnabled:YES];
[self.red addSubview: redButton];
[self.red bringSubviewToFront:redButton];
我在这里做错了什么?
代替这一行,redButton.frame = CGRectMake(self.red.frame.origin.x, self.red.frame.origin.y, self.red.frame.size.width, self.red.frame.size.height);
试试这个
redButton.frame = CGRectMake(0,0, self.red.frame.size.width, self.red.frame.size.height);
EDIT:这一行[self.red bringSubviewToFront:redButton];
是不需要的。
代替插入UIButton
作为子视图,使用UITapGestureRecognizer
,例如:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(correctButtonClick)];
[self.red addGestureRecognizer:tap];
你要做的是反转你的实现,添加UIButton到UIImageView不是一个好主意,而是创建一个自定义风格的UIButton编程,并添加UIImageView作为它的子视图,肯定会工作
编辑:至于你当前的实现,你在UIImageView中添加了UIButton,所以可能你想要图像的每个部分都接受click事件,在那种情况下,你的UIButton的x和y坐标将是0,0而不是红色。X和红色。Y,但是宽度和高度是正确的
直接做self.red.userInteractionEnabled = YES.
UIImageView有userInteractionEnabled NO作为默认值
自定义按钮没有UI。所以你不能选择它。(你可以尝试绑定按钮,或添加一些图像按钮和设置按钮alpha为0.1或其他)
@tkanzakic答案应该是正确的。只需将TapGestureRecognizer添加到ImageView或将Image添加到Button。
不使用单独的imageview和Button, 使用Button中的imageview属性。这将解决你所有的问题,并使你从编写额外的代码行中解脱出来。
UIButton *redButton = [UIButton buttonWithType: UIButtonTypeCustom];
redButton.imageView。形象=[界面图像imageNamed: @ " red.png "],
redButton.frame = CGRectMake(50, 300, 85, 100);
[redButton addTarget: self action:@selector(correctButtonClick) forControlEvents: UIControlEventAllTouchEvents];
[redButton setUserInteractionEnabled:YES];
[self.red addSubview: redButton];
这很简单,按钮没有响应,因为它的框架是错误的,所以它不是你认为它在哪里。基本上改变下面的行:
redButton.frame = CGRectMake(self.red.frame.origin.x, self.red.frame.origin.y, self.red.frame.size.width, self.red.frame.size.height);
与这个:redButton.frame = CGRectMake(self.red.bounds.origin.x, self.red.bounds.origin.y, self.red.frame.size.width, self.red.frame.size.height);