ios - 在 UIScrollView 中缩放 UIImageView – 不居中

标签 ios swift uiscrollview uiimageview zooming

我有一个 UIScrollView ,其中有一个 UIImageView 。只是一个简单的测试用例:UIImageView 是 ScrollView 的全宽,并通过自动布局以 Y 为中心。然而,在我的设备上的最终结果中,它并不是真正以 Y 为中心。

但是我有一个问题,当使用 ScrollView 缩放 UIImageView 时,它会“漂移”到底部区域 - 而不仅仅是按应有的方式在中心缩放。当缩小时(在视频的最后)它也会“漂移”到左侧并弹回到中心。

我制作了此行为的一个小预览视频:https://www.youtube.com/watch?v=ivRNkzNrcEA

这是我的简单测试代码:

class TestController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var SCROLL: UIScrollView!
@IBOutlet weak var IMAGE: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()

    SCROLL.minimumZoomScale = 1;
    SCROLL.maximumZoomScale = 6.0;
    SCROLL.zoomScale = 1.0;
    SCROLL.contentSize = IMAGE.frame.size;
    SCROLL.delegate = self;


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

}

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
    return IMAGE
}

func scrollViewDidZoom(scrollView: UIScrollView) {

}

func scrollViewDidEndZooming(scrollView: UIScrollView, withView view: UIView?, atScale scale: CGFloat) {

}

}

这是我的测试自动布局:

enter image description here

最佳答案

我不确定是否可以仅通过自动布局保持居中。对我有用的一种方法是对 UIScrollView 进行子类化并修改 layoutSubviews,如 Apple WWDC 示例所示。代码如下

-(void) layoutSubviews
{
    [super layoutSubviews];
    UIImageView *v = (UIImageView *)[self.delegate viewForZoomingInScrollView:self];
    //Centering code

    CGFloat svw = self.bounds.size.width;
    CGFloat svh = self.bounds.size.height;
    CGFloat vw = v.frame.size.width;
    CGFloat vh = v.frame.size.height;

    CGRect f = v.frame;

    if (svw > vw)
    {
        f.origin.x = (svw - vw)/2.0;
    }
    else
    {
        f.origin.x = 0;
    }

    if (svh > vh)
    {
        f.origin.y = (svh - vh)/2.0;
    }
    else
    {
        f.origin.y = 0;
    }

    v.frame = f;

}

关于ios - 在 UIScrollView 中缩放 UIImageView – 不居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39230394/

相关文章:

ios - 在第一个 ViewController 上使用后退按钮从 Tabbar 打开导航 Controller

ios - 使用 UIPageViewController 使 UI ScrollView 滚动

ios - 如何使用通用 Storyboard 在 Xcode 6 中创建 7.1 应用程序?

ios - 从 S3 存储桶下载特定文件

iphone - 如何确定我的应用程序支持的最旧的 iOS 版本?

swift - 在 Swift 中将通用数据类型的变量转换为 String

ios - 如何在播放时实现与歌曲对应的搜索?

ios - UIScrollView 指示滚动但不在 View 中滚动

ios - 将 TableView header 粘贴到顶部,导致用户向下滚动时 header 不是 "interact"

ios - iPhone:默认隐藏 UITableView 搜索栏