无法更新UIScrollView的zoomScale

时间:2016-02-01 12:46:26

标签: ios xcode uiscrollview swift-playground

如果newScale我正在尝试将zoomScale分配给UIScrollView的zoomScale == oldScale,并且作业zoomScale = newScale不起作用。

这是我操场上的测试代码。

import UIKit

let scrollView = UIScrollView()
let contentView = UIView()

scrollView.frame.size = CGSizeMake(200, 200)
contentView.frame.size = CGSizeMake(400, 400)

var zoomScale: CGFloat {
    get { return scrollView.zoomScale }
    set { scrollView.zoomScale = newValue }
}

var minimumZoomScale: CGFloat {
    get { return scrollView.minimumZoomScale }
    set { scrollView.minimumZoomScale = newValue }
}

func updateMinimumZoomScale(withScale newScale: CGFloat) {
    let oldScale = minimumZoomScale
    minimumZoomScale = newScale

    if zoomScale == oldScale {
        // zoomScale = 1, newScale = 0.1 //
        zoomScale = newScale
        zoomScale == newScale   // false
    }
}

updateMinimumZoomScale(withScale: 0.1)

这是结果的截图。

Screenshot of the playground result

在屏幕截图中,zoomScale == newScale的结果在作业false后立即为zoomScale = newScale

我真的不知道为什么会这样。

2 个答案:

答案 0 :(得分:3)

即使我在游乐场和实际项目中试用了你的代码,但它似乎没有用。问题是您需要在设置缩放比例之前为滚动视图设置委托。代表是这样设置的

scrollView.delegate = self

当您尝试为滚动视图设置缩放比例时调用-viewForZoomingInScrollView方法,如果您的委托是nil,则不会调用该方法。因此它不会设置缩放比例。您可以在更改缩放比例之前使用设置委托在Xcode项目中尝试相同的示例,它将起作用。

答案 1 :(得分:0)

对我来说,问题在于Xcode自动转换为Swift 3.委托设置正确,但委托方法格式不正确。