2015-02-28 19 views
11

Tôi có đoạn code dưới đây được thử nghiệm, nhưng khi tôi cho nó hạn chế nó trở nên một chút vòng tròn nhỏ:Làm cách nào để tạo vòng kết nối với CALayer?

override func drawRect(rect: CGRect) { 
var path = UIBezierPath(ovalInRect: rect) 
fillColor.setFill() 
path.fill() 

//set up the width and height variables 
//for the horizontal stroke 
let plusHeight:CGFloat = 300.0 
let plusWidth:CGFloat = 450.0 

//create the path 
var plusPath = UIBezierPath() 

//set the path's line width to the height of the stroke 
plusPath.lineWidth = plusHeight 

//move the initial point of the path 
//to the start of the horizontal stroke 
plusPath.moveToPoint(CGPoint(
    x:self.bounds.width/2 - plusWidth/2 + 0.5, 
    y:self.bounds.height/2 + 0.5)) 

//add a point to the path at the end of the stroke 
plusPath.addLineToPoint(CGPoint(
    x:self.bounds.width/2 + plusWidth/2 + 0.5, 
    y:self.bounds.height/2 + 0.5)) 

} 
+0

thử đặt nó trong viewDidAppear –

+0

không, không làm điều đó – picciano

Trả lời

15

Thay đổi bán kính và điền Màu sắc như bạn muốn. :)

import Foundation 
import UIKit 

class CircleLayerView: UIView { 
    var circleLayer: CAShapeLayer! 

    override func draw(_ rect: CGRect) { 
     super.draw(rect) 
     if circleLayer == nil { 
      circleLayer = CAShapeLayer() 
      let radius: CGFloat = 150.0 
      circleLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 2.0 * radius, height: 2.0 * radius), cornerRadius: radius).cgPath 
      circleLayer.position = CGPoint(x: self.frame.midX - radius, y: self.frame.midY - radius) 
      circleLayer.fillColor = UIColor.blue.cgColor 
      self.layer.addSublayer(circleLayer) 
     } 
    } 
} 
7

Các rect được thông qua vào drawRect là khu vực mà cần phải được cập nhật, không phải là kích thước của bản vẽ . Trong trường hợp của bạn, bạn có lẽ chỉ cần bỏ qua các rect được thông qua và thiết lập các vòng tròn với kích thước bạn muốn.

//// Oval Drawing 
    var ovalPath = UIBezierPath(ovalInRect: CGRectMake(0, 0, 300, 300)) 
    UIColor.whiteColor().setFill() 
    ovalPath.fill() 
+0

này nên là câu trả lời được chấp nhận. 'ovalInRect' là cách chính xác. Những người khác chỉ là cách giải quyết – thesummersign

2

Dựa trên sự kết hợp của @picciano và @Huynh_Inc câu trả lời, bây giờ tôi làm như sau:

var selectionLayer: CAShapeLayer? 

override func drawRect(rect: CGRect) { 

    super.drawRect(rect) 

    guard selectionLayer == nil else { 
     return 
    } 

    let layer = CAShapeLayer() 

    layer.path = UIBezierPath(ovalInRect: rect).CGPath 
    layer.fillColor = myCoolColor.CGColor 

    self.layer.addSublayer(layer) 

    selectionLayer = layer 
} 
Các vấn đề liên quan