2017-07-01 6 views
0

私はAVPlayerでビデオを表示するUIViewを持っています。コーナーの1つにビデオの時間を表示する必要があるため、コーナーの1つに黒いグラデーションを追加して、白の時間が常に見えるようにする必要があります。このようなUIViewの1つの隅にグラデーションを適用する

何か:

Sample

私の考えでは、ビデオでのUIViewの上のUIView(ViewA)を追加し、そのビューにViewAともUILabelに勾配を追加することです。 ..

私の問題は、UIColor.clearからUIColor.blackに向かう1つのコーナーにそのグラデーションを追加する方法がないということです。

単なるコーナーにグラデーションを適用するにはどうすればいいですか?

ありがとうございます!

+0

CoreImageフィルタの使用方法が分かっている場合は、「CIRadialGradient」がそのトリックを行う可能性があります。私はそれを使ったことはありませんが、望みのような四隅を持つために十分な半径を選ぶことができるように見えます。そこから、UIViewやCALayersの階層の問題がますます増えています。 https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIRadialGradient – dfd

答えて

1

これをUIViewに追加すると、プログラムによってもストーリーボードからもパラメータを変更できます。

@IBDesignable 
class GradientView: UIView { 

@IBInspectable var startColor: UIColor = .black { didSet { updateColors() }} 
@IBInspectable var endColor:  UIColor = .white { didSet { updateColors() }} 
@IBInspectable var startLocation: Double = 0.05 { didSet { updateLocations() }} 
@IBInspectable var endLocation: Double = 0.95 { didSet { updateLocations() }} 
@IBInspectable var horizontalMode: Bool = false { didSet { updatePoints() }} 
@IBInspectable var diagonalMode: Bool = false { didSet { updatePoints() }} 

override class var layerClass: AnyClass { return CAGradientLayer.self } 

var gradientLayer: CAGradientLayer { return layer as! CAGradientLayer } 

func updatePoints() { 
    if horizontalMode { 
     gradientLayer.startPoint = diagonalMode ? CGPoint(x: 1, y: 0) : CGPoint(x: 0, y: 0.5) 
     gradientLayer.endPoint = diagonalMode ? CGPoint(x: 0, y: 1) : CGPoint(x: 1, y: 0.5) 
    } else { 
     gradientLayer.startPoint = diagonalMode ? CGPoint(x: 0, y: 0) : CGPoint(x: 0.5, y: 0) 
     gradientLayer.endPoint = diagonalMode ? CGPoint(x: 1, y: 1) : CGPoint(x: 0.5, y: 1) 
    } 
} 
func updateLocations() { 
    gradientLayer.locations = [startLocation as NSNumber, endLocation as NSNumber] 
} 
func updateColors() { 
    gradientLayer.colors = [startColor.cgColor, endColor.cgColor] 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 
    updatePoints() 
    updateLocations() 
    updateColors() 
} 
} 
関連する問題