2017-05-11 4 views
1

ich so eine Ansicht zu erreichen bin versucht: enter image description herenur kreisförmige Ecke auf dem oberen Rand der Ansicht Hinzufügen

Ich habe versucht worden, um dieses Stück Code mit let maskPath = UIBezierPath(roundedRect: view.bounds, byRoundingCorners: [.topRight, .topLeft], cornerRadii: CGSize(width: 140, height: 140))

Aber alles, was ich habe so etwas wie diese:

enter image description here

ich habe bereits versucht width und height Wert zu ändern s, aber die Ansicht scheint sich überhaupt nicht zu ändern. Wie zeichne ich also eine Ansicht, die diese abgerundete Spitze enthält, wie im ersten Bild gezeigt?

Danke für das Vorschlagen einer Lösung, aber wie ich oben sagte, kann ich die Ecken gerundet, ich kann nicht nur die Spitze meiner Ansicht kreisförmig machen, so ist dies eine andere Frage.

+1

Mögliches Duplikat von [Wie setze ich cornerRadius nur für die obere linke und obere rechte Ecke eines UIView ein?] (Http://stackoverflow.com/questions/10167266/how-to-set-cornerradius-for-only -Opp-links-und-oben-rechts-Ecke-eines-uiview) –

+0

Eigentlich ist es nicht dupliziert, weil ich die Ecken abgerundet werden kann, was ich möchte, ist sie kreisförmig zu machen, genau wie ich im ersten Bild zeigen –

Antwort

0

Sie könnten versuchen, a circular UIBezierPath zu verwenden und seinen Radius anzupassen. Auf diese Weise erhalten Sie den gewünschten Effekt, solange Ihre Ansicht nicht unbegrenzt ausgedehnt ist (wie bei einer UIScrollView).

let radiusRatio = CGFloat(2/3) 

let screenRect = UIScreen.main.bounds 
let screenHeight = screenRect.height 
let screenWidth = screenRect.width 
let circleCenter = CGPoint(x: screenWidth/2, y: screenHeight/((1/radiusRatio) * 2)) 

let maskPath = UIBezierPath(arcCenter: circleCenter, 
          radius: screenHeight * radiusRatio, 
          startAngle: 0, 
          endAngle: CGFloat.pi, 
          clockwise: true) 

Die radiusRatio Variable steuert, wie viel von der Höhe des Bildschirms Kreisradius ist, oder in anderen Worten, wie tief unten Ihren Kreis Zentrum nimmt. Die Anpassung der radiusRatio sollte Ihnen schließlich geben, was Sie wollen.

+0

Ich habe versucht, den Code oben zu meiner Ansicht hinzuzufügen: 'let maskLayer = CAShapeLayer() maskLayer.frame = circularView.bounds maskLayer.path = maskPath.cgPath circularView.layer.mask = maskLayer', aber nichts passiert, ich denke ich könnte etwas falsch machen. –

Verwandte Themen