ios - 仅为 UIImageView 的一部分设置 alpha 值

标签 ios swift uiview uiimageview

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

This is what it looks like

我在 UIView 中添加了一个 Pan Gesture Recogniser,这样我就可以上下拖动它,效果很好。我试图在互联网上搜索以了解如何仅在 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
    }
}
}

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

最佳答案

这听起来像是将 CAShapeLayer 作为顶部 ImageView 层上的 mask 的工作。

(在 iOS 中, View 实际上是 Core Animation Layers 的薄包装器,它们进行实际的绘制。

您可以创建一个定义形状的 CAShapeLayer 并将其安装为 ImageView 层的 mask 层。然后 mask 的不透明部分使您的 ImageView 可见,但 mask 的透明部分隐藏了 mask 的那些部分。您可以移动蒙版的原点以响应平移手势以移动蒙版区域。

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

关于ios - 仅为 UIImageView 的一部分设置 alpha 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50080189/

相关文章:

ios - 我无法使用非主 MOC 在后台线程上创建 NSManagedObject 的新实例

iphone - 如何从 iPhone 的字符串中删除标签?

iOS:如何确定 viewWillAppear 中的当前方向?

ios - navigationItem 的自定义 titleView 在 iOS 11 上未被点击

ios - 识别 UIViewController 上的 View

ios - UIStackView 未出现在容器 View 中

ios - 如果我已经对 UIViewController 进行子类化,如何对 SwipeTableViewController 进行子类化?另外,如何向用户显示键盘? ( swift )

ios - 如何删除 UIStackView 中两个 tableview 之间的空间?

ios - 我怎样才能用 Swift 重写这个 block ?

ios - 如何以编程方式更改 UIView 的 "origin"(如 Xcode 中的标记)?