2016-01-23 43 views
0

我嘗試在文本上繪製三角形形狀,並在與文本相交的位置繪製形狀。使用形狀遮罩隱藏文本Swift

Example

當我嘗試敷面膜,文字就會消失。 這裏的代碼:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var messageLabel: UILabel! 
    let maskLayer = CAShapeLayer() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     drawMask() 
     messageLabel.layer.mask = maskLayer 
    } 

    func drawMask(){ 

     let path = UIBezierPath() 

     let xMsgLbl = messageLabel.center.x-80 
     let yMsgLbl = messageLabel.center.y-25 

     path.moveToPoint(CGPointMake(xMsgLbl,yMsgLbl)) 
     path.addLineToPoint(CGPointMake(xMsgLbl+80, yMsgLbl+80)) 
     path.addLineToPoint(CGPointMake(xMsgLbl-80,yMsgLbl+80)) 
     path.addLineToPoint(CGPointMake(xMsgLbl,yMsgLbl)) 
     path.closePath() 

     maskLayer.fillColor = UIColor.blueColor().CGColor 
     maskLayer.path = path.CGPath 

     view.layer.addSublayer(maskLayer) 


    } 
} 

回答

0

所以我想出瞭如何做到這一點。但它只是不適合我。必須有更好的方式來表達它。

我已經添加了UIView,並把它放在我的文本中,然後在視圖中應用了蒙版。它的工作。但爲什麼它不起作用。

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var textView: UIView! 
    @IBOutlet weak var messageLabel: UILabel! 

    let maskLayer = CAShapeLayer() 
    let path = UIBezierPath() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     drawMask() 

     maskLayer.opacity = 1.0 
     view.layer.addSublayer(maskLayer) 

     textView.layer.addSublayer(messageLabel.layer) 
     messageLabel.layer.position.x = CGFloat(view.layer.position.x)+4 

     messageLabel.layer.mask = maskLayer 
     messageLabel.layer.masksToBounds = true 

     textView.layer.mask = maskLayer 
     textView.layer.masksToBounds = true 

    } 

    func drawMask(){ 

     let xMin = CGFloat(view.center.x) 
     let yMin = CGFloat(view.center.y)-120 

     path.moveToPoint(CGPointMake(xMin,yMin)) 
     path.addLineToPoint(CGPointMake(xMin+80, yMin+120)) 
     path.addLineToPoint(CGPointMake(xMin-80,yMin+120)) 
     path.addLineToPoint(CGPointMake(xMin,yMin)) 
     path.closePath() 

     maskLayer.fillColor = UIColor.blackColor().CGColor 
     maskLayer.path = path.CGPath 

    } 
}