Swift:视野黑色

Posted

技术标签:

【中文标题】Swift:视野黑色【英文标题】:Swift: Around of view black 【发布时间】:2018-07-20 11:40:17 【问题描述】:

您好我正在创建一个裁剪照片的功能,我想裁剪照片的容器外部是黑色的,不透明度为0.5,请看下图更好地理解:

我用黑色绘制的只是我希望它是不透明度为 0.5 的黑色,如何做到这一点?

用户可以移动和改变框架的大小,我使用CGRect来改变这个大小。所以需要黑色背景随着边框大小和位移的变化而动态变化,不知道怎么做

我的 UIIvire 框架的类:

class ResizableView: UIView 

enum Edge 
    case topLeft, topRight, bottomLeft, bottomRight, none


static var edgeSize: CGFloat = 44.0
private typealias `Self` = ResizableView

var currentEdge: Edge = .none
var touchStart = CGPoint.zero

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
    if let touch = touches.first 

        touchStart = touch.location(in: self)

        currentEdge = 
            if self.bounds.size.width - touchStart.x < Self.edgeSize && self.bounds.size.height - touchStart.y < Self.edgeSize 
                return .bottomRight
             else if touchStart.x < Self.edgeSize && touchStart.y < Self.edgeSize 
                return .topLeft
             else if self.bounds.size.width - touchStart.x < Self.edgeSize && touchStart.y < Self.edgeSize 
                return .topRight
             else if touchStart.x < Self.edgeSize && self.bounds.size.height - touchStart.y < Self.edgeSize 
                return .bottomLeft
            
            return .none
        ()
    


override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) 
    if let touch = touches.first 
        let currentPoint = touch.location(in: self)
        let previous = touch.previousLocation(in: self)

        let originX = self.frame.origin.x
        let originY = self.frame.origin.y
        let width = self.frame.size.width
        let height = self.frame.size.height

        let deltaWidth = currentPoint.x - previous.x
        let deltaHeight = currentPoint.y - previous.y

        switch currentEdge 
        case .topLeft:
            self.frame = CGRect(x: originX + deltaWidth, y: originY + deltaHeight, width: width - deltaWidth, height: height - deltaHeight)
        case .topRight:
            self.frame = CGRect(x: originX, y: originY + deltaHeight, width: width + deltaWidth, height: height - deltaHeight)
        case .bottomRight:
            self.frame = CGRect(x: originX, y: originY, width: currentPoint.x + deltaWidth, height: currentPoint.y + deltaWidth)
        case .bottomLeft:
            self.frame = CGRect(x: originX + deltaWidth, y: originY, width: width - deltaWidth, height: height + deltaHeight)
        default:
            // Moving
            self.center = CGPoint(x: self.center.x + currentPoint.x - touchStart.x,
                y: self.center.y + currentPoint.y - touchStart.y)
        
    


override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) 
    currentEdge = .none


// MARK: - Border

@IBInspectable public var borderColor: UIColor = UIColor.clear 
    didSet 
        layer.borderColor = borderColor.cgColor
    


@IBInspectable public var borderWidth: CGFloat = 0 
    didSet 
        layer.borderWidth = borderWidth
    

【问题讨论】:

你的代码在哪里? 你有白色矩形的边框吗?添加一个黑色背景颜色和不透明度为 0.5 的 UIView 并添加一个 Mask 以让白色矩形可见? 用户可以移动和改变框架的大小,我使用CGRect来改变这个大小。所以需要黑色背景随着边框大小和位移的变化而动态变化,不知道怎么做 请提供您的代码 sn-p 以便更好地理解... 更新,看看我的代码,谢谢 【参考方案1】:

使用maskView 插入覆盖出血区域的图像。图像在出血区域的不透明度应为 50%。 Here's an example 关于如何实现这项技术。

let imageView = UIImageView(image: UIImage(named: "star"))
imageView.contentMode = .scaleAspectFill
view.maskView = imageView

【讨论】:

以上是关于Swift:视野黑色的主要内容,如果未能解决你的问题,请参考以下文章

Swift - captureOutput 帧提取的颜色总是接近黑色

无法使用白色按钮项色调使 UIToolBar 变为黑色(ios 9,Swift)

Swift - 推送到新 ViewController 时的黑色底栏

将其设置为清除后,Swift 模态视图背景显示为黑色

Swift - 如何在 2 个视图控制器之间导航时删除黑色导航栏

UINavigtionController Nib 的顶栏黑色不透明在 UIViewController 上不显示黑色