2017-03-09 8 views
0

Ich habe einen Viewcontroller, der ein paar Dinge im Storyboard eingerichtet hat - speziell 3 Tasten.Knopf oben auf Maske

Ich animiere Sachen hinter den Buttons, die "durch" sie zeigen, und habe eine Maskenansicht erstellt, die die Animation verstecken sollte. Das funktioniert. Das Problem ist, dass ich nicht weiß, ob ich die Buttons über die Maskenansicht legen soll. Sie sind auch dadurch verborgen. Ich habe versucht, wie button.layer.zPosition = 1, aber ohne Erfolg. Die rote Farbe dient der Sichtbarkeit.

 let bottomMaskStart = contentText.frame.origin.y+contentText.frame.height 
     bottomtMaskView = UIView(frame: CGRect(x: 0, y: bottomMaskStart, width: rangeView.frame.origin.x, height: self.view.frame.height-bottomMaskStart)) 
     bottomtMaskView.layer.backgroundColor = UIColor.red.cgColor 
     self.view.addSubview(bottomtMaskView) 
     self.playButton.layer.zPosition = 1 

Würde eine helfende Hand schätzen.

Die Animation hinter als eine Linie, gezeichnet mit Core-Grafik gehen - alle 100 ms mit dem aktuellen apmlitude des mic genannt:

func rangeWaveForm(){ 
     let viewHeight = self.rangeView.frame.height 
     let db = viewHeight - (CGFloat(self.calculateVoiceLevel())/maxDb)*viewHeight 
     let p = CGPoint(x:self.lastPoint.x+10, y: db) 
     self.drawLineFromPoint(start: self.lastPoint, toPoint: p, ofColor: UIColor.blue, inView: customView) 

     self.lastPoint = p 
} 



func drawLineFromPoint(start : CGPoint, toPoint end:CGPoint, ofColor lineColor: UIColor, inView view:UIView) { 
     let path = UIBezierPath() 
     path.move(to: start) 
     path.addLine(to: end) 
     let shapeLayer = CAShapeLayer() 
     shapeLayer.path = path.cgPath 
     shapeLayer.strokeColor = lineColor.cgColor 
     shapeLayer.lineWidth = 1.0 
     if(end.x > view.frame.width*0.95){ 

      let newRect = CGRect(x: view.frame.origin.x-10, y: view.frame.origin.y, width: view.frame.width+10, height: view.frame.height) 
      view.frame = newRect 

     } 
     if(start != CGPoint.zero){ 
      view.layer.addSublayer(shapeLayer) 
     } 

    } 

Antwort

0

Eine Maske, die ein Loch in einer Schicht/Ansicht Schnitten Schnitte, die gleiche Loch in allen Sublayers/Subviews vor diesem Loch.

Sie können eine Ansicht vor dem Loch platzieren, aber es wird nicht sichtbar sein, wenn es sich um eine Unteransicht der zu maskierenden Ansicht handelt.