所以我已经坚持了一段时间,在线阅读并尝试了许多不同的解决方案,但无法弄清楚我做错了什么。我想要完成的任务应该非常简单:我有一个UIView,我想绕其左下角和右下角,以便它们被剪裁而不是绘制。
这是我到目前为止(vwView是我在屏幕上自定义视图的出口):
func f(data: NSData) {
do {
let json = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers)
guard let parseJSON = json as? NSDictionary else {
print("JSON wasn't an object")
return
}
guard let userId = parseJSON["userID"] as? String else {
print("userId absent or not a string")
return
}
print("got userId \(userId)")
} catch {
print("Could not parse data as JSON: \(error)")
}
}
我做错了什么?另外:这只是我的原型,因为我真的想在UITableViewCell上做这个,所以如果我需要采取不同的方法,那也可能会有所帮助。
由于
詹姆斯
答案 0 :(得分:1)
问题是vwView
稍后会调整大小以适应屏幕,但您不会更新其新大小的路径。对此没有特别微不足道的解决方案。你基本上需要让vwView
成为一个自定义类(如果它还没有)并更新layoutSubviews
中的掩码。例如:
public class RoundedBorderView: UIView {
public var roundedCorners: UIRectCorner = [ .BottomLeft, .BottomRight ] {
didSet { self.setNeedsLayout() }
}
public var cornerRadii: CGSize = CGSizeMake(10, 10) {
didSet { self.setNeedsLayout() }
}
public override func layoutSubviews() {
super.layoutSubviews()
updateMask()
}
private func updateMask() {
let mask = maskShapeLayer()
mask.path = UIBezierPath(roundedRect: bounds, byRoundingCorners: roundedCorners, cornerRadii: cornerRadii).CGPath
}
private func maskShapeLayer() -> CAShapeLayer {
if let mask = layer.mask as? CAShapeLayer {
return mask
}
let mask = CAShapeLayer()
layer.mask = mask
return mask
}
}
将vwView
的类更改为RoundedBorderView
,它将维护自己的遮罩层。