2012-02-14 71 views
7

我有一個有趣的問題。我有一個UIScrollView和只有一個UIImageView和圖像。我需要這個縮放和平移。 好的。在一個按鈕觸摸我想在UIImageView(這是在UIScrollView,像一個提到)與下一個在線取代圖像。如何正確替換iOS中UIScrollView中的UIImageView中的圖像

到目前爲止,我已經做到了這一點像:

self.imageView = nil; 
self.imageView = [[UIImageView alloc] initWithImage:nextImage]; 

,我總是設置self.imageView爲零的原因是,如果我不這樣做,比下縮放圖像或縮放像前一個是。

但我不認爲這是解決內存效率的好方法。

是否有任何其他方式來設置UIImageView的新圖像與「重置」選項的縮放,比例等......?

UPDATE: 仍然無法正常工作代碼:

[self.scrollView setZoomScale:1.0]; 
[self.imageView setImage:photoImage]; 
[self.imageView setFrame:rect]; 
[self.scrollView setContentSize:[self.imageView frame].size]; 
CGFloat minZoomScale = [self.scrollView frame].size.width/[self.imageView frame].size.width; 
if (minZoomScale < [self.scrollView frame].size.height/[self.imageView frame].size.height) { 
    minZoomScale = [self.scrollView frame].size.height/[self.imageView frame].size.height; 
} 
[self.scrollView setMinimumZoomScale:minZoomScale]; 
[self.scrollView setZoomScale:[self.scrollView minimumZoomScale]]; 

更新2 就想通了我在做什麼錯。我沒有重置最小縮放比例。

[self.scrollView setMinimumZoomScale:1.0]; 

現在,它的工作原理!

回答

7

有一個叫zoomScale財產UIScrollView

設置1.0到您的滾動型的zoomScale。無需每次釋放舊的UIImageView並分配新的UIImageView。您可以直接將圖像設置爲imageview,並將UIScrollView的zoomScale設置爲1.0。

+0

這是正確的解決方案。謝啦! – 2012-02-14 10:49:17

+1

其實這是行不通的。 UIImageView從以前的圖像中獲取大小,這是錯誤的。我怎樣才能重置UIImageView? – 2012-02-14 11:02:40

+1

您是否在將zoomScale設置爲1後嘗試設置圖像? – Ilanchezhian 2012-02-14 11:06:38

1

您可以使用scrollView對象的zoomScale屬性,並在每次更改圖像時將其設置爲1.0。這可能會在加載新圖像之前進行。這樣,每次只想更改圖像時,您都不必分配和初始化新的UIIMageVIew對象。此外,您可以將此更改放入動畫塊中,以使圖像變得不銳利但漸變。

0

乳清你使用這個代碼,每次你創建新的對象,但以前的UIImageView留在你的UIScrollView。這在內存使用上效率不高。

使用下面的代碼:

[self.imageView removeFromSuperview]; 
[self.imageView release]; 
self.imageView = [[UIImageView alloc] initWithImage: nextImage]; 
[self addSubview: imageView]; 

[self.imageView setImage: nextImage]; 
[self.imageView setFrame: CGRectMake(0, 0, nextImage.size.width, nextImage.size.height)]; 

,然後,你可以爲你滾動型設置內容大小:

topScrollView.contentSize = CGSizeMake(nextImage.size.width, nextImage.size.height); 
1

只是想弄清楚一兩件事,因爲我遇到了同樣的問題:將最小縮放比例重置爲1。0之前,改變所述的ImageView的圖像:

[self.scrollView setMinimumZoomScale:1.0]; 
[self.scrollView setZoomScale:1.0]; 
[self.imageView setImage:photoImage]; 
[self.photoView setFrame:(CGRect){.origin=CGPointMake(0.0f, 0.0f), photoImage.size=photo.size}]; 
[self.scrollView setContentSize:[self.imageView frame].size]; 
CGFloat minZoomScale = MIN([self.scrollView frame].size.width/[self.imageView frame].size.width, [self.scrollView frame].size.height/[self.imageView frame].size.height) 
[self.scrollView setMinimumZoomScale:minZoomScale]; 
[self.scrollView setMaximumZoomScale:1.0]; 
[self.scrollView setZoomScale:[self.scrollView minimumZoomScale]]; 
[self centerScrollViewContents]; 

和用於定心圖像:

- (void)centerScrollViewContents { 
    CGSize boundsSize = self.scrollView.bounds.size; 
    CGRect contentsFrame = self.imageView.frame; 

    if (contentsFrame.size.width < boundsSize.width) { 
     contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width)/2.0f; 
    } else { 
     contentsFrame.origin.x = 0.0f; 
    } 

    if (contentsFrame.size.height < boundsSize.height) { 
     contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height)/2.0f; 
    } else { 
     contentsFrame.origin.y = 0.0f; 
    } 

    self.imageView.frame = contentsFrame; 
} 
相關問題