2015-09-21 2 views
0

Я пытаюсь перенести некоторый код iOS для приложения Mac. Мой код выглядит следующим образом:Преобразование CAShapeLayer для использования в NSImageView

func innerRing() { 
    let innerRing = CAShapeLayer() 
    let circleRadius: CGFloat = 105.0 
    innerRing.frame = InnerRingView.bounds 

    func circleFrame() -> CGRect { 
     var circleFrame = CGRect(x: 0, y: 0, width: 2*circleRadius, height: 2*circleRadius) 
     circleFrame.origin.x = CGRectGetMidX(InnerRingView.bounds) - CGRectGetMidX(circleFrame) 
     circleFrame.origin.y = CGRectGetMidY(InnerRingView.bounds) - CGRectGetMidY(circleFrame) 
     return circleFrame 
    } 

    innerRing.path = UIBezierPath(ovalInRect: circleFrame()).CGPath 
    innerRing.lineWidth = 3.0 
    innerRing.strokeStart = 0.0 
    innerRing.strokeEnd = 1.0 
    innerRing.fillColor = UIColor.clearColor().CGColor 
    innerRing.strokeColor = UIColor(red: 147.0/255.0, green: 184.0/255.0, blue: 255.0/255.0, alpha: 1.0).CGColor 
    InnerRingView.layer.addSublayer(innerRing) 
} 

Этот код работает очень хорошо, особенно для настройки цвета заливки, цвет обводки, и начало хода/конец.

В моем приложении Mac я эффективно пытаюсь использовать тот же код, но применяю его к NSImageView (я хочу, чтобы он отображался в каждой строке таблицы, и я настрою некоторые параметры (например, цвет), основываясь на том, что детали строки.

Может кто-нибудь помочь с руководством по добавлению этого простого круга к NSImageView?

ответ

3

Почему вы хотите использовать NSImageView? NSImageView для отображения изображений (иконки, рисунков, и т. д.)

Сделайте Ваш заказВместо этого. Просто помните, что в отличие от UIKit's UIView, NSView не получает слой по умолчанию, поэтому вам нужно указать It to, установив wantsLayer на true.

Как так:

class CircleView: NSView { 

    lazy var innerRing: CAShapeLayer = { 
     let innerRing = CAShapeLayer() 
     let circleRadius: CGFloat = 105.0 
     innerRing.frame = self.bounds 

     var circleFrame = CGRect(x: 0, y: 0, width: circleRadius, height: circleRadius) 
      circleFrame.origin.x = CGRectGetMidX(self.bounds) - CGRectGetMidX(circleFrame) 
      circleFrame.origin.y = CGRectGetMidY(self.bounds) - CGRectGetMidY(circleFrame) 

     innerRing.path = CGPathCreateWithEllipseInRect(circleFrame, nil) 
     innerRing.lineWidth = 3.0 
     innerRing.strokeStart = 0.0 
     innerRing.strokeEnd = 1.0 
     innerRing.fillColor = NSColor.clearColor().CGColor 
     innerRing.strokeColor = NSColor(red: 147.0/255.0, green: 184.0/255.0, blue: 255.0/255.0, alpha: 1.0).CGColor 
     return innerRing 
    }() 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     wantsLayer = true 
     layer = CALayer() 
     layer?.addSublayer(innerRing) 
    } 

} 
+0

Имеет смысл. Спасибо! – ZbadhabitZ

+2

Я провел некоторое время, проверяя этот код в глубине утром, и это было ** чрезвычайно полезно. Большое вам спасибо за руководство. – ZbadhabitZ

Смежные вопросы