私のアプリケーションには、1 つのサブビューを持つ UIScrollView があります。サブビューは、drawLayer イベントのレイヤーを使用して PDF ページをそれ自体に印刷する拡張 UIView です。
組み込みのピンチを使用したズームはうまく機能します。setZoomScale も期待どおりに機能します。
zoomToRect 関数に苦労しています。特定のCGPointからCGRect zoomRect変数を作成するオンラインの例を見つけました。
touchesEnded関数では、ダブルタップがあり、それらが完全にズームアウトされている場合、ダブルタップしたピンチの中心でピンチアウトしているかのように、作成した PDFUIView をズームインしたいと考えています。
したがって、ダブルタップした場合に zoomToRect を利用する関数に UITouch 変数を渡すとします。
私はリンゴのサイトで見つけた次の機能から始めました:
以下は、私の 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];
赤いボックスが表示され、タッチ ポイントが中央で死んでいます。
注: 私は PC からこれを書いています。Mac で 2 分割の部分をいじったことを思い出したので、タッチ ポイントが中央にある四角形が描画されると仮定してください。UIView が中心から外れていても、正しい場所にズームされていれば問題ありません。
ただし、zoomToRect を実行すると、ズームイン結果の左上にある zoomRect の右下を使用しているように見えます。
また、UIScrollView をクリックする場所に応じて、さまざまな場所に固定されることに気付きました。真ん中にクロスがあり、ポイントを反映しているように見えますが、真ん中の左側のどこかが負の反射であり、中央の右側のどこかが正の反射ですか?
これは複雑に思えますが、UIView が描画できたので、描画された四角形にズームするだけではいけませんか?
高品質でスケーリングする PDF を作成する方法を理解するために多くの調査を行ったので、CALayer を使用すると座標系から外れている可能性があると思いますか? しかし、UIScrollView に対しては、768x985 のサイズのビューとして扱う必要があります。
これは一種の上級者向けです。zoomRect を作成するコードはすべて適切であると想定してください。UIScrollView にある UIView の CALayer には、より深いものがあります。