2011-06-15 46 views
0

我試圖將低分辨率圖像加載到滾動視圖中,並且在第一次縮放後將其替換爲高分辨率圖像。第一次嘗試不太好。爲了讓我更好地理解正在發生的事情,我現在試圖加載高分辨率圖像,並在第一次縮放後用相同的高分辨率圖像替換它,即建立現狀。在我的viewDidLoad中我有:UIScrollView:無法在縮放後建立現狀

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LargeImage.png"]]; 
[scrollView addSubview:imageView]; 

scrollView.contentSize = imageView.bounds.size; 
scrollView.minimumZoomScale = 1.0; 
scrollView.minimumZoomScale = 0.25; 
scrollView.zoomScale = 0.251497; 
scrollView.clipsToBounds = YES; 
scrollView.delegate = self; 

這給出:
imageView.frame.size = 420580(滾動視圖的幀)
imageView.bounds.size = 1670,2306

在scrollViewDidEndZooming:我做的:

[imageView removeFromSuperview]; 
[imageView release]; 
scrollView.zoomScale = 1.0; 

CGRect svb = CGRectZero; 
svb.size = scrollView.frame.size; 
scrollView.bounds = svb; 

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LargeImage.png"]]; 
[scrollView addSubview:imageView]; 

scrollView.contentSize = imageView.bounds.size; 
scrollView.maximumZoomScale = 1.0; 
scrollView.minimumZoomScale = 0.25; 
scrollView.zoomScale = 0.251497; 

這給:

imageView.frame.size = 1670,2306 
imageView.bounds.size = 1670,2306 

我找不出爲什麼imageView.frame沒有縮放,因爲它在viewDidLoad。任何想法,我在做什麼錯或缺失?

+0

你在哪裏把日誌語句? – 2011-06-15 23:35:46

+0

我已經有NSLog語句「遍佈」,但將zoomScale設置爲0.251497後,NSLog正好處理imageView會生成兩個不同的imageView.frame值。 – user556572 2011-06-16 03:50:30

回答

-1

你必須告訴它滾動視圖查看你要放大,這是通過委託方法做- (UIView *)viewForZoomingInScrollView:(UIScrollView *)aScrollView

所以你的情況增加這一點,它去上班!

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)aScrollView { 
    return imageView; 
} 

而且永遠不會做:

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LargeImage.png"]]; 

,如果你想改變實例變量始終做到:

self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LargeImage.png"]]; 

會導致泄漏..

更好的做法:

UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LargeImage.png"]]; 
    self.imageView = imgView; 
    [imgView release]; 
imgView = nil; 

如果你不這樣做自己的程序可以不時崩潰(並不總是這是爲什麼它很難然後跟蹤它)

+0

縮放工程,viewForZoomingInScrollView:實現(和委託集)。問題是縮放結束時,我想做我稱之爲「現狀」,即恢復原始圖像。無論出於何種原因,當zoomScale設置時,imageView的框架設置不正確。是否執行self.imageView = ...或不取決於@property定義,這不是我在這裏遇到的問題。 – user556572 2011-06-16 09:32:58

+0

爲什麼要先將viewView作爲scrollview的子視圖添加到viewDidLoad中,然後再將其作爲子視圖再次添加到縮放代理中。你爲什麼不嘗試用self.imageView.image = [UIImage imageNamed:@「LargeImage.png」]替換zoom委託中的圖像; – Ladislav 2011-06-16 10:55:11

+0

正如前面提到的,我主要是通過練習來更好地理解事物的運作方式。 imageNamed:緩存圖像,因此將imageView.image設置爲相同的對象是一個無操作(嘗試過)。 – user556572 2011-06-16 18:47:52