Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在不可见的矩形之间滚动_Ios_Swift - Fatal编程技术网

Ios 在不可见的矩形之间滚动

Ios 在不可见的矩形之间滚动,ios,swift,Ios,Swift,请看这张照片: 想象一个滚动视图,其中粉红色的矩形是滚动页面上的每个图像 假设蓝色矩形是不可见的矩形,每个页面上的矩形大小不同 假设黄色矩形是一个静态图像,不在滚动视图中 我想在2和3之间滚动,黄色保持在相同的位置,但是当蓝色矩形移动时它消失了。(你只能在里面看到它) 在rect 3中,您可以看到滚动时黄色发生了什么 我应该如何将我的图层放置在滚动条上以创建这样的效果?因此,根据评论,您似乎需要一个具有简单视图的滚动视图。 此视图可以是内部有孔的覆盖图,请查看用于制作带孔图层的代码: func

请看这张照片:

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

假设蓝色矩形是不可见的矩形,每个页面上的矩形大小不同

假设黄色矩形是一个静态图像,不在滚动视图中

我想在2和3之间滚动,黄色保持在相同的位置,但是当蓝色矩形移动时它消失了。(你只能在里面看到它)

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


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

因此,根据评论,您似乎需要一个具有简单视图的滚动视图。 此视图可以是内部有孔的覆盖图,请查看用于制作带孔图层的代码:

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
}

您的描述令人困惑,所以您希望黄色是静态的还是移动的?只需将蓝色的一个设置为滚动视图,否则它将始终位于中心对不起。我也不明白你的建议。正如我所说的,黄色看起来像静态的,粉色和蓝色在移动,但当它们移动时,黄色只在蓝色矩形内出现,所以在页面之间看不到它。它有蓝色矩形的边界,所以基本上你只想在中间有滚动的页面滚动?你有代码吗?很难描述,很抱歉搞混了,我正在尝试制作带有“洞”的照片,这些洞是蓝色的矩形,所以黄色只出现在这些蓝色窗口中。我有一个带有照片的滚动视图,很明显,但我正试图弄清楚上面的视图应该有什么结构。我没有否决你,我投了赞成票,但我不知道你们做了什么,为什么会有黑色层?为什么α是0.85?我不确定你是否理解这个问题。你必须看到粉红色的照片,它们是不同的,它们不可能是恒定的黑色,每个粉红色的矩形是一张不同的照片,里面有一个洞。好的,所以我想你想添加一些东西来覆盖里面的照片,你想到处都有照片吗?你可以删除带有颜色的代码,我甚至可以为你做这件事我已经添加了一个添加图像层的代码,所以如果你要制作一个方法,只需将此图像传递到创建层和返回层,你就可以让它工作了。这个图像层里面有一个洞吗?如果有一个图像在它后面,我只会看到在这个矩形路径内?