首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIScrollView缩放和受影响的CAShapeLayer lineWidth

UIScrollView缩放和受影响的CAShapeLayer lineWidth
EN

Stack Overflow用户
提问于 2018-01-16 02:45:07
回答 1查看 450关注 0票数 0

我有一堆用UIBezierPath构建并存储在UIScrollView中的CAShapeLayers。

我想知道当UIScrollView缩放超过100%时,是否有任何方法可以使CAShapeLayer的lineWidth远离缩放。我的意思是将UIScrollView的转换规则应用于CAShapeLayer,但保持路径的宽度与1.0 zoomScale上的相同。(因此,当带有1pt路径lineWidth的图层将缩放到300%时,@2x设备上的图层的高度不会变成6px lineWidth,但会保持2px的高度)

EN

回答 1

Stack Overflow用户

发布于 2018-01-17 01:24:57

代码语言:javascript
复制
class ViewController : UIViewController, UIScrollViewDelegate {

    private lazy var scrollView = UIScrollView()
    private lazy var contentView = UIView()
    private lazy var shapeLayer = CAShapeLayer()
    private let lineWidth: CGFloat = 1

    override func loadView() {
        view = UIView()
        view.addSubview(scrollView)
        scrollView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        scrollView.addSubview(contentView)
        scrollView.minimumZoomScale = 1.0
        scrollView.maximumZoomScale = 2.0
        scrollView.delegate = self
        contentView.backgroundColor = .red
        let viewSize = CGSize(width: 400, height: 400)
        scrollView.contentSize = viewSize
        contentView.frame = CGRect(x: 0, y: 0, width: viewSize.width, height: viewSize.height)
        setUpShapeLayer(in: viewSize)
    }

    //MARK: - UIScrollViewDelegate

    func scrollViewDidZoom(_ scrollView: UIScrollView) {
        shapeLayer.lineWidth = lineWidth * 1 / scrollView.zoomScale
    }

    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
        return contentView
    }

    //MARK: - Private

    private func setUpShapeLayer(in size: CGSize) {
        shapeLayer.fillColor = UIColor.white.cgColor
        shapeLayer.strokeColor = UIColor.black.cgColor
        shapeLayer.lineWidth = lineWidth
        contentView.layer.addSublayer(shapeLayer)
        let shapeSize = CGSize(width: 200, height: 200)
        let shapeBounds = CGRect(origin: .zero, size: shapeSize)
        shapeLayer.bounds.size = shapeSize
        shapeLayer.path = UIBezierPath(ovalIn: shapeBounds).cgPath
        shapeLayer.position = CGPoint(x: size.width / 2, y: size.height / 2)
    }
}

这是你想要的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48268989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档