【问题标题】:Set alpha value for only a part of an UIImageView仅为 UIImageView 的一部分设置 alpha 值
【发布时间】:2018-04-28 19:14:55
【问题描述】:

我已将 2 个 UIImageViews 放在一起。底部的只是一个绿色图像,顶部是蓝色的。最重要的是,我有一个 UIView。这个想法是能够上下拖动 UIView,而不是只看到绿色,UIView 将在其矩形内显示底部图像,蓝色。

我在 UIView 中添加了一个平移手势识别器,这样我就可以上下拖动它,效果很好。我试图在互联网上搜索,以了解如何仅在 UIView 矩形内更改绿色图像的 alpha,使其看起来像一个窗口,但没有任何运气。到目前为止,这是我的代码:

import UIKit

class ViewController: UIViewController {

var windowViewOrigin: CGPoint!

@IBOutlet weak var topImageView: UIImageView!
@IBOutlet weak var bottomImageView: UIImageView!
@IBOutlet weak var windowView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    addPanGesture(view: windowView)
    windowViewOrigin = windowView.frame.origin
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

func addPanGesture(view: UIView){
    let pan = UIPanGestureRecognizer(target: self, action: #selector(ViewController.handlePan(sender:)))
    view.addGestureRecognizer(pan)
}

@objc func handlePan(sender: UIPanGestureRecognizer){
    let window = sender.view!
    let translation = sender.translation(in: view)

    switch sender.state {
    case .began, .changed :
        windowView.center = CGPoint(x: UIScreen.main.bounds.size.width*0.5, y: window.center.y + translation.y)
        sender.setTranslation(CGPoint.zero, in: view)
        break
    case .ended:
        UIView.animate(withDuration: 0.5) {
            self.topImageView.alpha = 0.0
        }
        break
    default:
        break
    }
}
}

我希望有人能在正确的方向上帮助我,我不知道如何从这一点继续前进。

【问题讨论】:

    标签: ios swift uiview uiimageview


    【解决方案1】:

    这听起来像是将 CAShapeLayer 用作顶部图像视图层上的蒙版的工作。

    (在 iOS 中,视图实际上是核心动画层的薄包装器,用于执行实际绘图。

    您可以创建定义形状的 CAShapeLayer 并将其安装为图像视图层的遮罩层。然后遮罩的不透明部分会导致您的图像视图可见,但遮罩的透明部分会隐藏遮罩的这些部分。您可以移动蒙版的原点以响应平移手势以移动蒙版区域。

    我建议搜索 CAShapeLayer 和 mask。网上有不少教程。 (我已经有一段时间没有弄乱形状图层和蒙版了,当我这样做的时候是在 Objective-C 中。我不认为我有任何可以分享的 Swift 代码。)

    【讨论】:

      【解决方案2】:

      只是一个想法:制作两个绿色的 ImageView,它们将显示在中间透明 windowView 的顶部和底部,并根据 windowView 的位置更改这两个视图的位置/高度。因此,windowView 下永远不会显示绿色视图。

      【讨论】:

      • 感谢您的回答。但这对我不起作用。我正在做一个必须模拟 X 射线的项目。我只选择颜色只是为了便于区分两个 imageView。将 UIView 想象成一个窗口,可以通过绿色图像查看蓝色图像。或者顶部图像是一个男人,而蓝色图像是同一个人的内部,如果有意义的话。这就是我想做的事情
      猜你喜欢
      • 1970-01-01
      • 2011-09-27
      • 2020-06-27
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多