我想提出以下解決方案。
AIImageView.m:
#import "AIImageView.h"
@implementation AIImageView
{
NSInteger _cnt;
}
- (id)initWithImage: (UIImage*)image
{
if ((self = [super initWithImage:image]))
{
[self setUserInteractionEnabled: YES];
UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget: self
action: @selector(handleTapGesture:)];
tapGesture.delegate = self;
[self addGestureRecognizer: tapGesture];
_cnt = 0;
}
return self;
}
- (UIView*) hitTest: (CGPoint) point withEvent: (UIEvent*) event
{
CGPoint result = [self convertPoint: point toView: self.scrollView];
_cnt++;
if (CGRectContainsPoint(self.frame, result))
{
if (_cnt > 2)
{
_cnt = 0;
}
else
{
return self.scrollView;
}
}
return [super hitTest: point withEvent: event];
}
- (void) handleTapGesture: (id) sender
{
NSLog(@"TAP!!!");
}
@end
AIImageView.h:
#import <UIKit/UIKit.h>
@interface AIImageView : UIImageView <UIGestureRecognizerDelegate>
@property(nonatomic, strong) UIScrollView* scrollView;
@end
創建的ImageView:
UIImage* image = [UIImage imageNamed: @"default_cover.png"];
imageView = [[AIImageView alloc] initWithImage: image];
imageView.frame = CGRectMake(100, 400, 100, 100);
imageView.scrollView = self.scrollView;
[self.view addSubview: imageView];
如果你會嘗試它,你可以看到這個解決方案的工作,但不總是:)。但我相信它可以幫助你。
這會使圖像視圖無法點擊。 –
我更新了我的答案 – stosha
與上面的解決方案一樣,從我的測試看來,這隻有在UIImage是UIScrollView的子視圖時纔有效。我試圖避免這一點,但我想這似乎是不可避免的。 – Aron