ズームとパンを備えた UIScrollView があります。ユーザーコマンドの後に画像を中央にスクロールしたい。私の問題は、画像の中心にあるフレームのサイズと位置を計算することです。
画像の中心の正しいフレームを計算する方法を知っている人はいますか? 問題は、zoomScale が異なるとフレームが変わることです。
ありがとう!
ズームとパンを備えた UIScrollView があります。ユーザーコマンドの後に画像を中央にスクロールしたい。私の問題は、画像の中心にあるフレームのサイズと位置を計算することです。
画像の中心の正しいフレームを計算する方法を知っている人はいますか? 問題は、zoomScale が異なるとフレームが変わることです。
ありがとう!
誰かが必要な場合に備えて、もう少し良いコードがあります;-)
UIScrollView+CenteredScroll.h:
@interface UIScrollView (CenteredScroll)
-(void)scrollRectToVisibleCenteredOn:(CGRect)visibleRect
animated:(BOOL)animated;
@end
UIScrollView+CenteredScroll.m:
@implementation UIScrollView (CenteredScroll)
-(void)scrollRectToVisibleCenteredOn:(CGRect)visibleRect
animated:(BOOL)animated
{
CGRect centeredRect = CGRectMake(visibleRect.origin.x + visibleRect.size.width/2.0 - self.frame.size.width/2.0,
visibleRect.origin.y + visibleRect.size.height/2.0 - self.frame.size.height/2.0,
self.frame.size.width,
self.frame.size.height);
[self scrollRectToVisible:centeredRect
animated:animated];
}
@end
Daniel Bauke の回答に基づいて、ズーム スケールを含めるように彼のコードを更新しました。
@implementation UIScrollView (jsCenteredScroll)
-(void)jsScrollRectToVisibleCenteredOn:(CGRect)visibleRect
animated:(BOOL)animated
{
CGPoint center = visibleRect.origin;
center.x += visibleRect.size.width/2;
center.y += visibleRect.size.height/2;
center.x *= self.zoomScale;
center.y *= self.zoomScale;
CGRect centeredRect = CGRectMake(center.x - self.frame.size.width/2.0,
center.y - self.frame.size.height/2.0,
self.frame.size.width,
self.frame.size.height);
[self scrollRectToVisible:centeredRect
animated:animated];
}
@end
よし、うまくいった。誰かが必要な場合のコードは次のとおりです。
CGFloat tempy = imageView.frame.size.height;
CGFloat tempx = imageView.frame.size.width;
CGRect zoomRect = CGRectMake((tempx/2)-160, (tempy/2)-240, myScrollView.frame.size.width, myScrollView.frame.size.height);
[myScrollView scrollRectToVisible:zoomRect animated:YES];