2016-03-31 231 views
0

我有一個自定義UIView子類,我想添加作爲我的UIViewController子視圖。問題是,即使所有設置都正確(在viewDidLoad視圖具有正確的框架,而不是hidden),並且它在Interface Builder(picture)中顯示,但運行該應用程序時仍未顯示視圖。在設備上,我只看到一個紅色的屏幕,中間沒有三角形。iOS - 自定義UIView不顯示在設備上

這裏的視圖子類:

@IBDesignable 
class TriangleView: UIView { 

    override func drawRect(rect: CGRect) { 
     super.drawRect(rect) 

     let path = UIBezierPath() 
     let width = rect.size.width 
     let height = rect.size.height 
     let startingPoint = CGPoint(x: center.x, y: center.y - height/2) 

     path.moveToPoint(startingPoint) 
     path.addLineToPoint(CGPoint(x: center.x + width/2, y: center.y - height/2)) 
     path.addLineToPoint(CGPoint(x: center.x, y: center.y + height/2)) 
     path.addLineToPoint(CGPoint(x: center.x - width/2, y: center.y - height/2)) 
     path.closePath() 

     let shapeLayer = CAShapeLayer() 
     shapeLayer.frame = rect 
     shapeLayer.position = center 
     shapeLayer.path = path.CGPath 
     shapeLayer.fillColor = UIColor.whiteColor().CGColor 

     layer.mask = shapeLayer 

     layer.backgroundColor = UIColor.redColor().CGColor 
    } 
} 

我沒有任何其他的代碼顯示,我只是認爲添加到ViewController並設置其約束和類TriangleView

+0

如果你設置一個斷點您的自定義視圖的drawRect,將它的調試器停止? – heximal

+0

是的,一切都按原樣運作,它只是不顯示。忘了提及,在代碼中添加視圖也不起作用。 – smeshko

+0

您是否嘗試過使用Xcode中的Debug View Hierarchy特性來檢查運行時的視圖? – heximal

回答

3

斯威夫特3

我的工作簡化了,你有什麼。我知道這是舊的,但這裏有一些作品,我相信實現你試圖做:

@IBDesignable 
class TriangleView: UIView { 

    override func draw(_ rect: CGRect) { 
     super.draw(rect) 

     let width = rect.size.width 
     let height = rect.size.height 

     let path = UIBezierPath() 
     path.move(to: CGPoint(x: 0, y: 0)) 
     path.addLine(to: CGPoint(x: width, y: 0)) 
     path.addLine(to: CGPoint(x: width/2, y: height)) 
     path.close() 
     path.stroke() 

     let shapeLayer = CAShapeLayer() 
     shapeLayer.fillColor = UIColor.white.cgColor 
     shapeLayer.path = path.cgPath 

     layer.addSublayer(shapeLayer) 
     layer.backgroundColor = UIColor.red.cgColor 
    } 
} 

一些差異:

  • 我只用3分而不是4對三角形然後關閉它。

  • 前2點是在UIView的角落。

  • 我加了layer.addSublayer(shapeLayer)。我相信這就是爲什麼它在運行應用程序時沒有顯示出來。

  • 刪除了一些我認爲不需要的代碼,但如果您確實需要,可以將其添加回去。

Simulator

0

你有沒有試過,

[self.view bringSubviewToFront:TriangleView] 

加入您的TriangleView爲您的視圖控制器的子視圖後,將這個。

+0

不起作用,已經嘗試過。 – smeshko

+0

嘗試設置self.view.backgroundColor = [UIColor clearColor];在viewDidLoad中 –

相關問題