We Simplify, But We Perfect.


UIScrollView + UIImageView 下 touch事件无响应

2014-11-08


       因为需要,我在做一个这样的效果,利用一个UIScrollView里面添加一些UIImageView,然后希望点击ImageView做到点击效果,或者去重写touch事件做一些事,类似代码如下:

- (IBAction)selectBut:(id)sender
{
    scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(x, y, w, h)];
    scrollView.userInteractionEnabled = YES;
    int y = 0;
    for (int i = 0; i < [myArray count]; i++) {
        UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(0, y, 75, 30)];
        image.userInteractionEnabled = YES;
        y = y + 35;
        [scrollView addSubview:image];
    }
    [self.view addSubview:scrollView];
    [scrollView setContentSize:CGSizeMake(150, 300)]
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{
    UITouch *touch = [touches anyObject];
    if ([touch tapCount] == 1) {
        NSLog(@"One touch !!");
    }
}
       这里我已经给ImageView的userInteractionEnabled设置为YES了(UIImageView的userInteractionEnabled默认为NO),但是,无论我怎么做 最后touch事件还是无法响应,原因如下:Subviews of UIScrollview will never call touchesBegan method directly. You need to customized with subview to get touchesBegan properties of that added subview/customized view.
       解决方法:customize the UIImageView with your own view inherited from UIImageView. Provide touch methods in that customized subclass and add it on your UIScrollView..

 @interface CustomImageView : UIImageView
 {
 }
@implementation CustomImageView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
    }
    return self;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"%s", __FUNCTION__);
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    if ([touch tapCount] == 2) {
        drawImageView.image = nil;
        return;
    }
}


</p>


上一篇:Objective-C代码自动格式化 下一篇:iOS 下关于 MD5 的那个坑