我的應用程序有一個子視圖的UIScrollView。子視圖是一個擴展的UIView,它使用drawLayer事件中的圖層將PDF頁面打印到自己。UIScrollView zoomToRect沒有縮放到給定矩形(從UITouch CGPoint創建)
使用內置夾捏變焦效果很好。 setZoomScale也按預期工作。
我一直在努力與zoomToRect函數。我在網上找到了一個例子,它從給定的CGPoint創建CGRect的zoomRect變量。
在touchesEnded函數中,如果出現了雙擊並且它們全部縮小,我想放大到我創建的那個PDFUIView,就好像它們正在擠壓雙中心一樣。 。
因此,假設我將UITouch變量傳遞給我的函數,該函數利用zoomToRect,如果它們雙擊。
我開始用下面的功能我在蘋果網站上發現:
下面是修改後的版本爲我的UIScrollView擴展分類:
- (void)zoomToCenter:(float)scale withCenter:(CGPoint)center {
CGRect zoomRect;
zoomRect.size.height = self.frame.size.height/scale;
zoomRect.size.width = self.frame.size.width/scale;
zoomRect.origin.x = center.x - (zoomRect.size.width/2.0);
zoomRect.origin.y = center.y - (zoomRect.size.height/2.0);
//return zoomRect;
[self zoomToRect:zoomRect animated:YES];
}
當我做到這一點, UIScrollView似乎使用zoomRect的右下邊緣而不是中心進行縮放。
如果我做的UIView這樣
UIView *v = [[UIView alloc] initWithFrame:zoomRect];
[v setBackgroundColor:[UIView redColor]];
[self addSubview:v];
紅色框顯示了觸摸點在中心死亡。
請注意:我從我的電腦上寫下了這個消息,我記得在我的Mac上把它分成了兩部分,所以我們假設這會在中間點觸摸一個矩形。如果UIView退出中心但放大到正確的位置,那將會很好。
但是,會發生什麼情況是,當它執行zoomToRect時,似乎使用放大結果左上角的縮放右下角的右下角。
此外,我注意到,根據我點擊UIScrollView的位置,它錨定到不同的點。幾乎看起來中間有一個十字架,它以某種方式反映這些點,好像中間的任何一個地方都是負面反射,而中間的任何一個地方都是正面的反射?
這似乎很複雜,不應該只是放大到UIView能夠繪製的矩形?
我用了大量的研究來弄清楚如何創建一個高質量的PDF,所以我假設使用CALayer可能會丟掉座標系?但對於UIScrollView,它應該將其視爲768x985尺寸的視圖。
這是一種先進的,請假設創建zoomRect的代碼都很好。在UIView中的CALayer有一些東西在UIScrollView中......
末評論,但我無法抗拒;如果這是有效的:這是純粹的運氣。乘中心的座標沒有意義。如果您需要在中心上執行翻譯,請改爲添加一個值。但最有可能的是,該中心是不正確的,因爲它是從錯誤的座標系引用計算出來的(例如,從錯誤的視圖) – jyavenard 2011-09-12 08:55:10