Iphone 触摸图像事件,通过使用UIButton实现,但与UIImageView相比显示延迟
对不起,标题太乱了,我只是不知道如何用一种微妙的方式来描述这个问题 我正在编写一个类似于相册的应用程序,在我的滚动视图中显示一组图像,并在触摸图像时执行一些操作 我回答了这个问题:并使用带有背景图像的按钮来处理触摸事件 我最初的方法是使用NSOperation从internet并发获取图像,将其放在imageview中并添加到我的scrollview中,速度相当不错,因为每个imageview都在每次NSOperation回调之后显示 然后我将imageview更改为uibutton,奇怪的是,当NSOperation回调时,该按钮没有显示在我的视图中。当所有操作回调完成时,它们立即显示。这使得用户体验变得不可接受 这是我的NSOperation回调函数,它将传递一个包含从internet获取的图像的按钮Iphone 触摸图像事件,通过使用UIButton实现,但与UIImageView相比显示延迟,iphone,uiimageview,uibutton,uitouch,Iphone,Uiimageview,Uibutton,Uitouch,对不起,标题太乱了,我只是不知道如何用一种微妙的方式来描述这个问题 我正在编写一个类似于相册的应用程序,在我的滚动视图中显示一组图像,并在触摸图像时执行一些操作 我回答了这个问题:并使用带有背景图像的按钮来处理触摸事件 我最初的方法是使用NSOperation从internet并发获取图像,将其放在imageview中并添加到我的scrollview中,速度相当不错,因为每个imageview都在每次NSOperation回调之后显示 然后我将imageview更改为uibutton,奇怪的是,
- (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*)事件
UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(newTapMethod)];
[_imageButtonName setUserInteractionEnabled:YES];
[_imageButtonName addGestureRecognizer:newTap];
然后创建newTapMethod(或者你给它起的名字)
希望这会有所帮助。猜测您必须在主线程中执行这些操作->也许从performSelectorOnMainThreadTill加载的图像中调用的方法是正确的,您需要从主线程执行这项工作。UIImageView可能已经工作,但这只是一个实现问题。感谢您的回复,我已经更新了NSOperation的代码,您的意思是我应该将其移动到AppDelegate而不是viewcontroller吗?您好,感谢您的回复,我按照您的建议添加imageview和自定义类型不透明按钮,现在它工作得很好。再次感谢!
-(void)newTapMethod{
//...
}