繁体   English   中英

UIImageView不响应某些边缘上的手势

[英]UIImageView not responding to gestures on certain edges

我正在制作一个包含UIImageView和Label的自定义控件。 该控件的行为就像一个复选框。

这是代码:

-(instancetype) initWithTitle:(NSString *)title normalCheckBoxImage:(NSString *)normalCheckBoxImage selectedCheckBoxImage:(NSString *)selectedCheckBoxImage
{
    self = [super init];

    self.userInteractionEnabled = YES;

    self.normalCheckBoxImageName = normalCheckBoxImage;
    self.selectedCheckBoxImageName = selectedCheckBoxImage;
    self.title = title;

    [self setupSubViews];

    [self registerGestureRecognizers];

    return self;
}

-(void) registerGestureRecognizers
{
    UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(checkBoxTapped:)];
    singleTapGestureRecognizer.delegate = self;
    singleTapGestureRecognizer.numberOfTapsRequired = 1;

    [self.checkBoxImageView addGestureRecognizer:singleTapGestureRecognizer];
}

-(void) checkBoxTapped:(UITapGestureRecognizer *) recognizer
{
    self.isChecked = !self.isChecked;

    if(self.isChecked)
    {
        [self.checkBoxImageView setImage:[UIImage imageNamed:self.selectedCheckBoxImageName]];
    }

    else
    {
        [self.checkBoxImageView setImage:[UIImage imageNamed:self.normalCheckBoxImageName]];
    }

}

-(void) setupSubViews
{
    self.checkBoxImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:self.normalCheckBoxImageName]];

    self.checkBoxImageView.frame = CGRectMake(0, 0, 50, 50);

    NSLog(@"width = %f; height = %f",self.checkBoxImageView.frame.size.width,self.checkBoxImageView.frame.size.height);

    [self.checkBoxImageView setUserInteractionEnabled:YES];

    // The init with frame should be replaced by the NSConstraints
    self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.checkBoxImageView.frame.size.width + 5, 10, 100, 20)];

    self.titleLabel.text = self.title;

    [self addSubview:self.checkBoxImageView];
    [self addSubview:self.titleLabel];
}

我已将手势识别器附加到UIImageView。 但是由于某种原因,它只有在我靠近UIImageView的左边缘时才会触发。 我不确定自己在做什么错。 如果我触摸uIImageView的中间,则它不会执行任何操作。

这是图片:

在此处输入图片说明

在此处输入图片说明

问题是超级视图的框架不正确。 而不是宽度和高度为50 X 50,而是50 X 20。

AZCheckBox *checkbox = [[AZCheckBox alloc] initWithTitle:@"I agree" normalCheckBoxImage:@"NormalCheckBoxImage" selectedCheckBoxImage:@"SelectedCheckBoxImage"];
    checkbox.frame = CGRectMake(100, 100, 200, 50);

    checkbox.delegate = self;

    [self.view addSubview:checkbox];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM