2013-11-21 118 views
2

我有一個UIScrollView與子視圖,(其本身是A的內容查看d的子視圖 - 所以不是滾動視圖的內容視圖A)它有一個子視圖,我們稱之爲C的UIScrollView -zoomToRect:動畫:與視圖之間轉換CGPoint

+------------------------+ 
| A      | 
|      | 
| +-------------------+ | 
| |D (=contentView) | | 
| | +-----------+ | | 
| | | B   | | | 
| | | +--+ | | | 
| | | |C | | | | 
| | | +--+ | | | 
| | +-----------+ | | 
| +-------------------+ | 
+------------------------+ 

我想了滾動精確放大,因此C充溢着我的iPhone的屏幕,或者至少它顯示給我儘可能的大。 我無法圍繞縮放前的滾動視圖的zoomScale(讓我們假設我在放大縮放並且縮放比例爲2.45時放大)的頭部。 所以第一個問題是,zoomScale是否會影響UIScrollView放大的矩形?

我的第二個問題是關於CGPoint轉換。 iOS有一些內置函數可以在視圖之間轉換CGPoints/CGRects,但是我根本無法從給定的引用中產生任何有效的東西。

這是我打算做:

1)轉換ç的原點一個的座標系:

CGPoint originConvertedToAsCoordinateSystem = [self convertPoint:C.frame.origin toView:A]; 

2)放大到矩形與給定的ç起源

//shortened for the purpose of readability 
CGPoint p = originConvertedToAsCoordinateSystem; 

CGRect zoomRect = CGRectMake(p.x,p.y,C.frame.size.width,C.frame.size.height); 
[A zoomToRect:zoomRect animated:YES]; 

我有neglecte d在我給出的例子中,AzoomScale的值,因爲我真的不知道是要乘數還是除數。

+0

不知道我理解你的問題。只需要注意:縮放矩形必須位於內容視圖的座標空間中(我假設它是子視圖B),因此您無需轉換C.frame,只需按原樣使用即可。 – yurish

+1

@yurish我只想將滾動視圖'A'放大到視圖'C'的原點。我不能'僅僅使用'C'的框架',因爲它的框架在'B'的座標系中。所以我必須將'C'的原點轉換爲'A'的座標空間。 –

+0

對不起,但「放大原點」(這是點,而不是矩形)對我來說沒有多大意義。你有沒有讀過zoomToRect方法的描述?它明確指出:「該矩形應位於viewForZoomingInScrollView返回的視圖的座標空間中:」。您的案例中的視圖必須是B,而不是您正在嘗試執行的滾動視圖本身。無論如何看到答案。 – yurish

回答

1

問題更新後更新時間:

如果你想以編程方式放大和和,這樣子視圖Ç填滿整個滾動視圖矩形(滾動視圖邊界)滾動滾動視圖,你需要在做以下的視圖控制器:

CGRect rectToZoom = [self.D convertRect:self.C.frame fromView:self.B]; 

[self.scrollView zoomToRect:rectToZoom animated:YES]; 

這是假設你返回查看d作爲視圖縮放:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return self.D; 
} 

滾動視圖的maximumZoomScale,contentSize和contentInset屬性必須足夠大以允許滾動和縮放(檢查:嘗試手動執行所需操作並查看是否可能)。

相關問題