我是iOS编程新手,对iOS和Objective-C知识有限,请给我一些帮助。iOS如何在模型更改时刷新ScrollView?
我正在开发一个flickr照片应用程序,它基本上需要来自flickr API的照片数据并在scrollView中显示。
但我在我的iPad版本中遇到了一些问题,用UISplitViewController提供。 让我给我一个简单的介绍我的应用程序。
MASTER VIEW:嵌入UINavigationViewController,基本上它只是使用一些Flickr的API来获取一些数据,目前像这样的UITableViewController的列表:
navigationController - >
tableViewControllerA(由国家组织的照片) - >
tableViewControllerB(在该国照片列表) 当TableViewControllerB被选择的照片,在我的代码我通过照片URL(从Flickr API)到我的详细视图控制器,其是滚动型,这里是我的代码在滚动lView的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(滚动视图)的财产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我没有足够的信誉来更新图像,让你们完全理解我的应用程序是什么,希望你可以通过刚才我说
UPDATE明白: 我用KVO机制,而不是覆盖了photoURL的setter方法,但[self.scrollView setNeedsDisplay]仍然不起作用。
我使用调试器来跟踪进度,KVO的作品,但[self.xxx setNeedsDisplay]后,没有发生任何事情,我完全困惑,不知道该怎么做。
首先感谢您的帮助,我还没有学会KVO。我将阅读Apple文档指南,然后测试它是否可行。谢谢〜 – ifournight 2012-03-23 14:29:18
...并记住removeallObserver在dealloc .... – bandejapaisa 2012-03-23 14:31:14
Em ... KVO机制工作正常,但[self.scrollView setNeedsDisplay]仍然没有任何影响... – ifournight 2012-03-23 14:46:28