如何使用scrollRectToVisible滚动到图像的中心?

Jon*_*nah 7 iphone center zoom uiscrollview

我有一个带缩放和平移的UIScrollView.我希望图像在用户命令后滚动到中心.我的问题在于计算图像中心的框架的大小和位置.

有谁知道如何为我的图像中心计算正确的帧?问题是如果zo​​omScale不同,则帧会发生变化.

谢谢!

Dan*_*uke 16

如果有人需要,可能会有更好的代码;-)

的UIScrollView + CenteredScroll.h:

@interface UIScrollView (CenteredScroll)

-(void)scrollRectToVisibleCenteredOn:(CGRect)visibleRect
                            animated:(BOOL)animated;

@end
Run Code Online (Sandbox Code Playgroud)

的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
Run Code Online (Sandbox Code Playgroud)


Coo*_*ant 7

根据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
Run Code Online (Sandbox Code Playgroud)