【问题标题】:UIActivityIndicatorView, display during image download on current viewUIActivityIndicatorView,在当前视图下载图片时显示
【发布时间】:2011-05-11 02:18:44
【问题描述】:
我有一个按钮,当按下它时,它会从网上下载几张图片,以便在另一个视图中显示它们。然而,此刻,当我按下按钮时,按钮进入突出显示状态,并且在图像下载时似乎卡在那里(基本上准备下一个视图)。我并不担心按钮卡在突出显示模式(实际上我更喜欢这种方式)。
但是,我希望 UIActivityView 显示在显示按钮的视图上,同时加载下一个视图(并且图像是从网络下载的,因为这需要一段时间)......如何我开始在逻辑上实现这个?
谢谢,
杰克
【问题讨论】:
标签:
iphone
objective-c
ios
view
uiactivityindicatorview
【解决方案1】:
我假设您正在使用 NSURLConnection 连接和下载图像?如果是这种情况,您可能希望使用这样的方法:
在 IB 中,将 UIActivityIndicatorView 放置在您想要的视图上,并在其属性面板中定义其样式。告诉它停止时隐藏。并确保将其与所有者头文件中的代码链接起来。
UIActivityIndicatorView *indicator;
和
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *indicator;
当您创建 NSURLConnection 并开始请求时,告诉指示器以 [indicator startAnimation]; 开始动画。如果您不希望您的按钮出现在屏幕上,您可以根据需要将其从超级视图中移除。
下载完成后,您可以在 - (void)connectionDidFinishLoading:(NSURLConnection *)connection 方法中告诉指示器 [indicator stopAnimation](如果您之前已将其删除,则将按钮添加回来)。
如果您在不使用 NSURLConnection 的情况下下载图像,这当然会有所不同,但从逻辑上讲,它应该是相同的方法。虽然我同意大卫的观点,这可能应该在后台线程上完成
【解决方案2】:
你在主线程中做了很长时间的工作。您应该更改代码,以便在后台线程中进行下载。您可以更改按钮的状态以指示下载正在进行中,但不要以这种方式阻塞主线程。
在后台线程中,加载图片并调用主线程上的选择器,在下载更多图片时更新 UIActivtyView 以指示其进度。
【解决方案3】:
对于您的按钮问题,为您为正常分配的突出显示状态分配相同的图像
UIImage *newImage12 = [UIImage imageNamed:@"yourimagename"];
[deleteButton setBackgroundImage:newImage12 forState:UIControlStateNormal];
[deleteButton setBackgroundImage:newImage12 forState:UIControlStateHighlighted];
用于添加活动指示器
在.h文件中
IBOutlet UIActivityIndicatorView *indicator;
制作属性
在您的 xib 中添加指标并进行连接。
合成并发布in.m文件
在您的按钮上单击要显示指标的位置:-
[indicator startAnimating];
您要停止指标写入的位置
[indicator stopAnimating];
【解决方案4】:
您可以将指标框架设置在您需要的位置; UIButton 的中心。
您尚未指定如何下载图片,但开始下载时使用[indicator startActivity];,下载完成后使用[indicator stopActivity];
您还可以在添加开始/停止调用的位置添加setHidden:YES / setHidden:NO。