Событие прикосновения к изображению, достигнутое с помощью UIButton, но с задержкой по сравнению с UIImageView - PullRequest
0 голосов
/ 31 марта 2011

Извините за грязное название, я просто не знаю, как деликатно описать проблему.

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

Я следовал за этим вопросом: как я могу обнаружить событие касания UIImageView и использовать кнопку с фоновым изображением для обработки события касания.

Мой оригинальный метод заключается в использовании NSOperation для одновременного извлечения изображения из Интернета и добавления его в режим просмотра изображений и добавления к моему просмотру прокрутки, и скорость вполне приемлема, поскольку каждый просмотр изображений отображается сразу после каждого обратного вызова NSOperation.

Затем я изменяю imageview на uibutton, странная вещь в том, что при обратном вызове NSOperation эта кнопка не отображается в моем представлении. Они появляются сразу, когда все обратные вызовы NSOperation сделаны. Это делает работу пользователя неприемлемой.

Это моя функция обратного вызова NSOperation, она пропустит кнопку, содержащую изображение, извлеченное из Интернета

- (void)imageLoaded:(UIButton*)button;
{
    NSLog(@"Done");
    [button addTarget:self action:@selector(buttonPressed:) 
     forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

Кнопки будут отображаться только после того, как появятся последние «Готово» вместо одной за другой, это нормально? или я что то напутал?

==== update ========

Я думаю, что я запускаю NSOperation на моем контроллере представления. У меня есть класс imageLoadOperation, я передам ему свой viewcontroller

imageLoadOperation *ilo = [[imageLoadOperation alloc] initWithURLString:[NSString stringWithFormat:@"link for the image"];
[ilo setParent:self];
[queue addOperation:ilo];
[ilo release];

А в основной функции imageLoadOperation я сделаю

[parentViewController performSelectorOnMainThread:@selector(imageLoaded:) withObject:button waitUntilDone:NO];

Вы хотите сказать, что мне нужно перенести этот код в мой AppDelegate вместо того, чтобы запускать его в моем viewcontrollor?

Ответы [ 2 ]

0 голосов
/ 16 июля 2013

Что если вместо преобразования в кнопку вы просто позволили вашему UIImageView обрабатывать событие касания?

Чтобы добавить сенсорное событие в UIImageView, используйте следующий формат в вашем .m

UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(newTapMethod)];

[_imageButtonName setUserInteractionEnabled:YES];

[_imageButtonName addGestureRecognizer:newTap];

затем создайте newTapMethod (или как вы его называете)

-(void)newTapMethod{
//...
}

надеюсь, что это поможет.

0 голосов
/ 31 марта 2011

Вы можете использовать кнопку пользовательского типа поверх изображения, вместо кнопки с фоновым изображением, или вы можете использовать сенсорное событие в UIImageView

  • (void) touchesBegan: (NSSet *)касается события: (UIEvent *)
...