2016-10-03 3 views
0

Ich habe eine UIView Unterklasse namens myView und eine UIViewController namens myViewController.UIView Maskierung auf iOS 10

Ich füge myView als eine Unterklasse innerhalb myViewController hinzu, und ich maskiere auch myView Unteransicht in seiner Datei.

Das Problem ist, dass wenn ich maskieren, die Ansicht einfach vollständig verschwindet.

Jeder weiß warum?

Danke!

Mein Code:

myViewController:

override func viewDidLoad() { 
    let theView = myView(frame: CGRectZero) 
    theView.translatesAutoresizingMaskIntoConstraints = false 
    self.view.addSubview(theView) 

    theView.bottomAnchor.constraintEqualToAnchor(self.view.bottomAnchor).active = true 
    theView.leftAnchor.constraintEqualToAnchor(self.view.leftAnchor).active = true 
    theView.rightAnchor.constraintEqualToAnchor(self.view.rightAnchor).active = true 
    theView.heightAnchor.constraintEqualToAnchor(self.view.heightAnchor, multiplier: 0.17).active = true 
} 

myView:

override func layoutSubviews() { 

     super.layoutSubviews() 
     let ev = UIView(frame: self.bounds) 
     ev.backgroundColor = UIColor.blueColor() 
     ev.translatesAutoresizingMaskIntoConstraints = false 
     self.addSubview(ev) 

     ev.rightAnchor.constraintEqualToAnchor(self.rightAnchor).active = true 
     ev.bottomAnchor.constraintEqualToAnchor(self.bottomAnchor).active = true 
     ev.leftAnchor.constraintEqualToAnchor(self.leftAnchor).active = true 
     ev.heightAnchor.constraintEqualToAnchor(self.heightAnchor, multiplier: 1.5).active = true 

     let myPath: CGPathRef = PocketSVG.pathFromSVGFileNamed("CategoriesBar").takeUnretainedValue() //Creating a CGPath object using a 3rd party API 
     var transform: CGAffineTransform = CGAffineTransformMakeScale(self.frame.size.width/754.0, self.frame.size.height/220.0) //Resizing it 

     let transformedPath: CGPathRef = CGPathCreateMutableCopyByTransformingPath(myPath, &transform)! //Creating a re-sized CGPath 

     let myShapeLayer = CAShapeLayer() 
     myShapeLayer.path = transformedPath 
     myShapeLayer.fillRule = kCAFillRuleEvenOdd 

     let myMaskedView = UIView(frame: self.frame) 
     myMaskedView.backgroundColor = UIColor.blackColor() 
     myMaskedView.layer.mask = myShapeLayer 
     ev.maskView = myMaskedView //THE PROBLEM. If I remove this line the view is visible (but it isn’t masked), but when I don’t the view just completely disappears! 
} 

Hinweis: das Problem passiert, wenn ich auf iOS aktualisiert 10, auf iOS 9 ist alles vollkommen in Ordnung.

Antwort

0

'self.view.layoutSubviews()' in 'viewDidLoad()' vor der Implementierung 'UIView' arbeitete für mich. Es hat etwas mit Lebenszyklusänderungen des View-Controllers in iOS10 zu tun.

+0

Funktioniert nicht für mich ... Irgendeine andere Idee? –

+0

Nun, ich habe mein Problem für ungefähr eine Stunde behoben und was ich verstanden habe, ist jetzt, dass Sie sehr vorsichtig mit 'self.bounds' 'self.frame' etc. sein sollten, denn in meinem Fall manipulierte ich' UIView' Maske, wenn ihr Frame , was in swift 2.3 in Ordnung war, wurde (0, 0, 1000, 1000), also reparierte ich es, indem ich "UIView.bounds" druckte, es in verschiedene Funktionen stellte und am Ende einen Weg fand, es nicht zu machen (0 , 0, 1000, 1000) (durch Hinzufügen von 'self.view.layoutSubviews()'). Ich vermute, dass Ihr Problem ähnlich ist, aber ich bin mir nicht 100% sicher. – JuicyFruit

+0

'self.bounds': (0.0, 0.0, 375.0, 113.5) ' self.frame': = (0.0, 553.5, 375.0, 113.5) –

Verwandte Themen