触摸图像上的事件,通过使用UIButton实现,但显示延迟比较UIImageView

时间:2011-03-31 15:57:00

标签: iphone uiimageview uibutton uitouch

对于凌乱的标题感到抱歉,我只是不知道如何以一种微妙的方式描述问题。

我正在编写一个类似专辑的应用程序,在我的滚动视图中显示一堆图像,并在触摸图像时执行某些操作。

我按照了这个问题:how can i detect the touch event of an 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];
}

按钮只会在最后一次“完成”后出现而不是逐一显示,这是正常的吗?或者我弄乱了什么?

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

我想我正在我的viewcontroller上运行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 :(得分:0)

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

  • (void)touchesBegan:(NSSet *)触及withEvent:(UIEvent *)事件

答案 1 :(得分:0)

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

要向UIImageView添加触摸事件,请在.m

中使用以下格式
UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(newTapMethod)];

[_imageButtonName setUserInteractionEnabled:YES];

[_imageButtonName addGestureRecognizer:newTap];

然后创建newTapMethod(或者你命名的那个)

-(void)newTapMethod{
//...
}
希望有所帮助。