О 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
    }
}
Другие вопросы по тегам