iOS: обнаружение UIImageView для событий UITouch - PullRequest
1 голос
/ 27 февраля 2012

Я добавил немного UIImageView динамически и заполнил его различными изображениями, я пытаюсь сделать так: «Разрешить пользователю устанавливать позицию для любого UIImageView» , для этого я использовал

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    //Here I want the object of particular UIImageView on which user touched.
}

В этом методе, который я делаю,

NSLog(@"%@",[touches anyObject]);

Возвращает вывод

<UITouch: 0x68b95e0> phase: Began tap count: 1 window: <UIWindow: 0x68875d0; frame = (0 0; 320 480); layer = <UIWindowLayer: 0x68b6470>> view: <UIImageView: 0x6a74cf0; frame = (83.7763 83.7763; 182.447 182.447); transform = [0.968912, -0.247404, 0.247404, 0.968912, 0, 0]; alpha = 0.8; opaque = NO; tag = 3; layer = <CALayer: 0x6a74980>> location in window: {161, 230} previous location in window: {161, 230} location in view: {52.7761, 105.448} previous location in view: {52.7761, 105.448}

Обратите внимание, что в выводе выше он показывает мой UIImageView объект, к которому я прикоснулся. Но я хочу этот объект от него !!!

Я хочу, чтобы мой UIImageView, к которому обратился пользователь ?, я уже установил свойство userInteractionEnabled=YES, поэтому проблема не в этом!

Я использовал приведенный ниже код, чтобы получить его, но он не будет работать.

NSInteger tag=[[[touches anyObject] view] tag]; //It only returns tag of UIView tag

Я гуглю, но не могу найти решение!

Заранее благодарю за любую помощь!

Ответы [ 6 ]

5 голосов
/ 27 февраля 2012

Вот, пожалуйста:

только для одного просмотра изображений вы можете обнаружить другое с помощью того же оператора if.

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [touches anyObject]; 
    CGPoint touch_point = [touch locationInView:self.view];

    if (![imageView pointInside:touch_point withEvent:event]) 
    {
        NSLog(@"point inside imageview");
    }
} 

или вы также можете сделать это: p

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [touches anyObject];

    if (touch.view == iv)
    {
        NSLog(@"i got you");
    }
}

вот так: (iv и iv2 - это два разных UIImageView)

if (touch.view == iv)
{
    NSLog(@"i got you");
}

if (touch.view == iv2)
{
    NSLog(@"i got you too :p");
}
4 голосов
/ 28 февраля 2012
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch=[touches anyObject];

    if([[touch valueForKey:@"view"] isKindOfClass:[UIImageView class]])
    {
            UIImageView *viewSelected=(UIImageView *)[touch valueForKey:@"view"]; //it returns touched object
            //for further differences can user viewSelected.tag
    }
}
1 голос
/ 22 ноября 2014

Код для получения только координат X и Y из UIImageView:

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
   UITouch *touch = [[event allTouches] anyObject];

   CGPoint touch_point = [touch locationInView:self.imgView];

    if ([imgView pointInside:touch_point withEvent:event])
    {
        NSLog(@"point inside imageview");
        cords=[NSString stringWithFormat:@"%f,%f",touch_point.x,touch_point.y];
        NSLog(@"cords are%@",cords);
    }
}
0 голосов
/ 27 февраля 2012

Вы можете добавить представление, которое вы добавляете, в NSMutableArray, а затем просто сравнить так:

Я не в моем Mac, но это что-то похожее на это:

NSInteger viewID = [_views indexOfObject:[[touches anyObject] view]];

Этот возврат и число, если не существует, делают это:

if (viewID != NSNotFound) {
//it exist the view and its in the array
}
0 голосов
/ 27 февраля 2012

1 Подкласс UIImageView и реализовать:

Ответ на события касания

– touchesBegan:withEvent:
– touchesMoved:withEvent:
– touchesEnded:withEvent:
– touchesCancelled:withEvent:

Ответ на события движения

– motionBegan:withEvent:
– motionEnded:withEvent:
– motionCancelled:withEvent:

или

2 Добавьте UIGestureRecognizer к каждому UIImageView.

0 голосов
/ 27 февраля 2012

Вы можете использовать UIButton со свойствами изображения вместо UIImageView.

Если вы хотите вызвать свою собственную функцию, довольно легко обработать многие события, такие как Touch up inside или Touch Cancel, добавив селектор.

UIButton *yourBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

/* Depend on your dynamic programming handle */
yourBtn.frame = CGRectMake(40, 140, 240, 30);  

/* If you prefer just only image ,no need to set Title name */
[yourBtn setTitle:@"Your Button Title" forState:UIControlStateNormal]; 

/* choose yourFunction for each UIButton */
[yourBtn addTarget:self action:@selector(yourFunction) forControlEvents:UIControlEventTouchUpInside];

/* your button will be appear in the position that you have define */
[self.view addSubview:yourBtn];

Надеюсь, это поможет вам!

...