Iphone 触摸图像事件,通过使用UIButton实现,但与UIImageView相比显示延迟

Iphone 触摸图像事件,通过使用UIButton实现,但与UIImageView相比显示延迟,iphone,uiimageview,uibutton,uitouch,Iphone,Uiimageview,Uibutton,Uitouch,对不起,标题太乱了,我只是不知道如何用一种微妙的方式来描述这个问题 我正在编写一个类似于相册的应用程序,在我的滚动视图中显示一组图像,并在触摸图像时执行一些操作 我回答了这个问题:并使用带有背景图像的按钮来处理触摸事件 我最初的方法是使用NSOperation从internet并发获取图像,将其放在imageview中并添加到我的scrollview中,速度相当不错,因为每个imageview都在每次NSOperation回调之后显示 然后我将imageview更改为uibutton,奇怪的是,

对不起,标题太乱了,我只是不知道如何用一种微妙的方式来描述这个问题

我正在编写一个类似于相册的应用程序,在我的滚动视图中显示一组图像,并在触摸图像时执行一些操作

我回答了这个问题:并使用带有背景图像的按钮来处理触摸事件

我最初的方法是使用NSOperation从internet并发获取图像,将其放在imageview中并添加到我的scrollview中,速度相当不错,因为每个imageview都在每次NSOperation回调之后显示

然后我将imageview更改为uibutton,奇怪的是,当NSOperation回调时,该按钮没有显示在我的视图中。当所有操作回调完成时,它们立即显示。这使得用户体验变得不可接受

这是我的NSOperation回调函数,它将传递一个包含从internet获取的图像的按钮

- (void)imageLoaded:(UIButton*)button;
{
    NSLog(@"Done");
    [button addTarget:self action:@selector(buttonPressed:) 
     forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}
按钮只会在最后一次“完成”后显示,而不是逐个显示,这正常吗?还是我把事情搞砸了

==更新========

我想我正在viewcontroller上运行NSO操作。我有一个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而不是在我的ViewController中运行吗?

您可以在图像视图上使用自定义类型的按钮,而不是在背景图像上使用按钮,或者您可以在UIImageView上使用触摸事件

  • (无效)触摸开始:(NSSet*)触摸事件:(UIEvent*)事件

如果您不转换为按钮,而是允许UIImageView处理触摸事件,该怎么办

要将触摸事件添加到UIImageView,请在.m中使用以下格式

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

[_imageButtonName setUserInteractionEnabled:YES];

[_imageButtonName addGestureRecognizer:newTap];
然后创建newTapMethod(或者你给它起的名字)


希望这会有所帮助。

猜测您必须在主线程中执行这些操作->也许从performSelectorOnMainThreadTill加载的图像中调用的方法是正确的,您需要从主线程执行这项工作。UIImageView可能已经工作,但这只是一个实现问题。感谢您的回复,我已经更新了NSOperation的代码,您的意思是我应该将其移动到AppDelegate而不是viewcontroller吗?您好,感谢您的回复,我按照您的建议添加imageview和自定义类型不透明按钮,现在它工作得很好。再次感谢!
-(void)newTapMethod{
//...
}