О setUserInteractionEnabled UIImageView в iOS
Я новичок в iOS, и у меня проблема с setUserInteractionEnabled
как: у меня есть объект расширить из UIImageView, как:
@interface CustomImageView : UIImageView
@property (retain, nonatomic) NSString *sNameImage;
@property (retain, nonatomic) NSString *sID;
@property (assign, nonatomic) float nPointX;
@property (assign, nonatomic) float nPointY;
-(void)setPoint:(NSString *)sPoint;
Затем, когда я добавлю его в UIView, как:
for(int i = 0; i < self.arrCustomImageView.count; i++)
{
CustomImageView *cuiv = [self.arrCustomImageView objectAtIndex:i];
NSData *data = [self readDataFromFile:cuiv.sNameImage];
if(data != nil && data.length > 0)
{
UIImage *image = [[UIImage alloc] initWithData:data];
CGRect r = CGRectMake(cuiv.nPointX, cuiv.nPointY, image.size.width, image.size.height);
[cuiv setUserInteractionEnabled:FALSE]; /*or NO i tried all*/
[cuiv setImage:image];
cuiv.frame = r;
[self addSubview:cuiv];
[image release];
image = nil;
}
}
Затем в touchesBegan
Я все еще ловлю событие, когда касаюсь его (я все еще получаю журнал, когда касаюсь его): |
Тогда исходный метод touchBegan:
UITouch * touch = [touches anyObject];
for (UIView *aView in [self subviews])
{
if (CGRectContainsPoint([aView frame], [touch locationInView:self]))
{
self.imvChoice = (CustomImageView *) aView;
originalPoint = aView.frame.origin;
offsetPoint = [touch locationInView:aView];
nIndexChoice = [self.arrCustomImageView indexOfObject:aView];
NSLog(@"log: %@ >> %@: id: %d", NSStringFromClass([self class]),NSStringFromSelector(_cmd), nIndexChoice);
[self bringSubviewToFront:aView];
}
}
Я не думаю, что это проблема, потому что я пытаюсь добавить такой же UIImageView, как:
for(int i = 0; i < [arrObject count]; i++)
{
CustomObject *nsObj = [arrObject objectAtIndex:i];
UIImageView *image1 = [self createUIImageView:[nsObj sName1] pointX:nsObj.pPoint1.x pointY:nsObj.pPoint1.y];
image1.tag = i;
[image1 setUserInteractionEnabled:FALSE];
UIImageView *image2 = [self createUIImageView:[nsObj sName2] pointX:nsObj.pPoint2.x pointY:nsObj.pPoint2.y];
image2.tag = i;
[image2 setUserInteractionEnabled:TRUE];
[self addSubview:image1];
[self addSubview:image2];
[image1 release];
[image2 release];
}
это работает нормально: | Я не могу поймать событие, когда нажмите на изображение1 и изображение2 можно.
Значит, у меня ошибка? Пожалуйста, объясните мне! Спасибо за поддержку!
1 ответ
touchesBegan
получает прикосновения ко всему viewcontroller, а не только к одному uiview. если вы установите userInteractionEnabled
ложное представление не будет получать какие-либо конкретные события просмотра, такие как UITouchUpInside
,
Если вы хотите проверить вас touchesBegan
метод, если пользователь нажал на "отключенный" объект, вы должны получить координаты, где пользователь коснулся вашего ViewController, например, вот так
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchPoint = [touch locationInView:self.view];
и затем проверьте, находится ли ваша TouchPoint внутри прямоугольника объекта просмотра, который вы хотите проверить
if (CGRectContainsPoint(cuiv, touchPoint){
if (cuiv.userInteractionEnabled) {
// your element is enabled, do something
} else {
// your element is disabled, do something else
}
}