#ios #iphone #swift #cocoa-touch #uiview
#iOS #iPhone #swift #cocoa-touch #uiview
Вопрос:
У меня есть вызываемый UIView
подкласс myView
и UIViewController
вызываемый myViewController
.
Я добавляю myView
как подкласс внутри myViewController
, и я также маскирую myView
subview внутри его файла.
Проблема в том, что когда я маскируюсь, представление просто полностью исчезает.
Кто-нибудь знает почему?
Спасибо!
Мой код:
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, amp;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!
}
Примечание: проблема возникла, когда я обновился до iOS 10, на iOS 9 все в порядке.
Ответ №1:
« self.view.layoutSubviews()
viewDidLoad()
перед внедрением « UIView
сработало для меня. Это как-то связано с изменениями жизненного цикла viewcontroller в iOS10.
Комментарии:
1.Ну, я решал свою проблему около часа, и я понял, что теперь вы должны быть очень осторожны с
self.bounds
self.frame
etc. потому что в моем случае я манипулировалUIView
mask, когда его фрейм, который был в порядке в swift 2.3, стал (0, 0, 1000, 1000), поэтому я исправил это с помощьюпечатьUIView.bounds
, размещение ее в разных функциях и, в конце концов, нашел способ сделать так, чтобы она не была (0, 0, 1000, 1000) ( путем добавленияself.view.layoutSubviews()
). Я предполагаю, что ваша проблема аналогична, но я не уверен на 100%.2.
self.bounds
: (0.0, 0.0, 375.0, 113.5)self.frame
: = (0.0, 553.5, 375.0, 113.5)