【发布时间】:2012-04-08 01:56:33
【问题描述】:
我是 iOS 编程新手,对 iOS 和 Objective-C 了解有限,所以请给我一些帮助。
我正在开发一个 flickr 照片应用程序,它基本上需要来自 flickr API 的照片数据并在 scrollView 中显示一个。
但我在 iPad 版本中遇到了一些问题,显示为 UISplitViewController。 让我简单介绍一下我的应用。
MASTER VIEW:嵌入在 UINavigationViewController 中的 UITableViewController 列表,基本上它只是使用一些 Flickr API 来获取一些数据,呈现如下:
导航控制器->
tableViewControllerA(按国家整理的照片)->
tableViewControllerB(该国家/地区的照片列表) 当在 TableViewControllerB 中选择照片时,在我的代码中,我将照片 URL(来自 flickr API)传递给我的详细视图控制器,它是一个滚动视图,这是我在滚动视图的 ViewController 中的代码。
IBOutlet UIScrollView *scrollView;
IBOutlet UIImageView *imageView;
NSURL *photoURL;
- (void) viewDidLoad
{
[super viewDidLoad];
dispatch_queue_t downloadQueue = dispatch_queue_create("flickr donwloader", NULL);
dispatch_async(downloadQueue, ^{
// load image
self.imageView.image = [UIImage imageWithData: [NSData dataWithContentsOfURL:self.photoURL]];
dispatch_async(dispatch_get_main_queue(), ^{
// configure scrollView and imageView
CGSize photoSize = self.imageView.image.size;
self.scrollView.delegate = self;
[self.scrollView setZoomScale:1.00];
[self.scrollView setMinimumZoomScale:0.5];
[self.scrollView setMaximumZoomScale:1.00];
self.scrollView.contentSize = photoSize;
self.imageView.frame = CGRectMake(0, 0, photoSize.width, photoSize.height);
CGPoint scrollCenter = self.scrollView.center;
self.imageView.center = scrollCenter;
});
});
dispatch_release(downloadQueue);
在主视图中选择图片时,我设置了detailView(scrollView)的属性photoURL,所以我覆盖了photoURL的setter方法
-(void) setPhotoURL:(NSURL *)photoURL
{
// do something to refresh my scrollView, below are something I already tried
self.imageView.image = [UIImage imageWithData: [NSData dataWithContentsOfURL:self.photoURL]];
[self.scrollView setNeedsDisplay];
[self.view setNeedsDisplay];
[self.imageView setNeedsDisplay];
}
我的目的是当我的模型(photoURL)给出时,我的scrollView应该给我相应的imageView,但是当我的应用程序运行并且我选择一张照片时,scrollView没有“更新”,我已经学会了如何更新UITableView(self.tableView reloadData),但是我真的不知道怎么做,请帮忙!
PS:
1 请原谅我糟糕的英语-_- 我已经尽力解释清楚了。
2 我没有足够的声望来更新图片让你们充分了解我的应用程序是什么,希望你们能理解我所说的
更新: 我使用KVO机制而不是覆盖photoURL的setter方法,但是[self.scrollView setNeedsDisplay]仍然不起作用。
我使用调试器跟踪进度,KVO 工作,但 [self.xxx setNeedsDisplay] 之后没有任何反应,我完全糊涂了,不知道该怎么办。
【问题讨论】:
标签: iphone objective-c ios uiscrollview