在不可见的rects之间滚动

时间:2017-10-17 07:08:10

标签: ios swift

看看这张照片: enter image description here

想象一下滚动视图,其中粉红色的每个都是滚动页面上的图像。

想象一下,每个页面上蓝色的不可见大小不同。

想象一下,黄色矩形是一个静态 =不在滚动视图上的图像。

我想在2和3之间滚动,黄色停留在同一位置,但是当蓝色移动时它会消失。 (你只在里面看到它)

在rect 3中,您可以看到滚动时黄色会发生什么。

如何将我的图层放在滚动条上以创建这样的效果?

1 个答案:

答案 0 :(得分:1)

因此,基于评论,您看起来需要具有简单视图的滚动视图。 这个视图可以是内部有一个洞的叠加层,看看用于制作带孔的图层的代码:

func layerWith(img: UIImage) -> CALayer {

    let overlay = UIView(frame: CGRect(x: 0, y: 0,
                                           width: UIScreen.main.bounds.width,
                                           height: UIScreen.main.bounds.height))

    // Create the initial layer from the view bounds.
    let maskLayer = CAShapeLayer()
    maskLayer.frame = overlay.bounds
    let myImage = UIImage(named: "star")?.cgImage
    maskLayer.frame = myView.bounds
    maskLayer.contents = myImage

    // Create the frame.
    let radius: CGFloat = 150.0
    let rect = CGRect(x: overlay.frame.midX - radius,
                      y: overlay.frame.midY - radius,
                      width: 2 * radius,
                      height: 2 * radius)

    // Create the path.
    let path = UIBezierPath(rect: overlay.bounds)
    maskLayer.fillRule = kCAFillRuleEvenOdd

    // Append the rect to the path so that it is subtracted.
    path.append(UIBezierPath(rect: rect))
    maskLayer.path = path.cgPath

    // Set the mask of the view.
    overlay.layer.mask = maskLayer

    // Add the view so it is visible.
    return overlay
}

还有一些代码可以将子视图添加到scrollview中:

var i: CGFloat = 0
//or width that you want
let width = UIApplication.shared.keyWindow!.frame.width

for item in items {
     let frame = CGRect(x: width * i, y: 0, width: width, height: scrollView.frame.height)
     let v = UIView(frame: frame)
     //here you can add layer from code above to this view before adding it to scrollview
     v.layer.addSublayer(layerWith(img:your image goes here))
     self.scrollView.addSubview(v)

    i += 1
}