//: OS X import Cocoa class SAMView:NSView { override func drawRect(dirtyRect: NSRect) { // 在保持其中心点不变的情况下使其收缩, 在x轴上收缩1个点 在y轴上收缩1个点 let pathRect = NSInsetRect(self.bounds, 1, 1) let path = NSBezierPath(roundedRect: pathRect, xRadius: 50, yRadius: 50) path.lineWidth = 1 NSColor.greenColor().setFill() NSColor.blackColor().setStroke() path.fill() path.stroke() } } let viewRect = NSRect(x: 0, y: 0, width: 100, height: 100) let myEmptyView = SAMView(frame: viewRect) class SAMView1 :NSView { override func drawRect(dirtyRect: NSRect) { let bezierPath = NSBezierPath() let selfRect = self.bounds let drawingRect = CGRectInset(selfRect, selfRect.width * 0.05, selfRect.width * 0.05) // 确定点 let topLeft = CGPointMake(CGRectGetMinX(drawingRect), CGRectGetMaxY(drawingRect)) let topRight = CGPointMake(CGRectGetMaxX(drawingRect), CGRectGetMaxY(drawingRect)) let bottomLeft = CGPointMake(CGRectGetMinX(drawingRect), CGRectGetMinY(drawingRect)) let bottomRight = CGPointMake(CGRectGetMaxX(drawingRect), CGRectGetMinY(drawingRect)) let center = CGPointMake(CGRectGetMidX(drawingRect), CGRectGetMidY(drawingRect)) bezierPath.moveToPoint(topLeft) bezierPath.lineToPoint(topRight) bezierPath.lineToPoint(bottomLeft) bezierPath.curveToPoint(bottomRight, controlPoint1: center, controlPoint2: center) bezierPath.closePath() NSColor.redColor().setFill() NSColor.blackColor().setStroke() bezierPath.fill() bezierPath.stroke() } } let frame = CGRect(x: 0, y: 0, width: 200, height: 200) let targetView = SAMView1(frame: frame) class SAMView2 :NSView { override func drawRect(dirtyRect: NSRect) { let bezierPath = NSBezierPath() let squareRect = CGRectInset(dirtyRect, dirtyRect.width * 0.045, dirtyRect.height * 0.05) let circleRect = CGRectInset(dirtyRect, dirtyRect.width * 0.3, dirtyRect.height * 0.3) let cornerRadius :CGFloat = 20 let circlePath = NSBezierPath(ovalInRect: circleRect) let squarePath = NSBezierPath(roundedRect: squareRect, xRadius: cornerRadius, yRadius: cornerRadius) // append path to main path squarePath.appendBezierPath(circlePath) bezierPath.appendBezierPath(squarePath) NSColor.redColor().setFill() bezierPath.fill() } } let frame2 = CGRectMake(10, 10, 200, 200) let view2Target = SAMView2(frame: frame2) class SAMShadowView: NSView { override func drawRect(dirtyRect: NSRect) { let drawingRect = CGRectInset(dirtyRect, dirtyRect.width * 0.1, dirtyRect.height * 0.1) let cornerRadius: CGFloat = 20 let bezierPath = NSBezierPath(roundedRect: drawingRect, xRadius: cornerRadius, yRadius: cornerRadius) NSGraphicsContext.saveGraphicsState() let shadow = NSShadow() shadow.shadowColor = NSColor.blackColor() shadow.shadowOffset = CGSizeMake(3, -3) shadow.shadowBlurRadius = 10 shadow.set() NSColor.redColor().setFill() bezierPath.fill() NSGraphicsContext.restoreGraphicsState() } } let frameShadow = CGRectMake(0, 0, 100, 100) let shadowView = SAMShadowView(frame: frameShadow) class SAMGradient: NSView { override func drawRect(dirtyRect: NSRect) { let drawingRect = CGRectInset(dirtyRect, dirtyRect.width * 0.1, dirtyRect.height * 0.1) let cornerRadius:CGFloat = 20 let bezierPath = NSBezierPath(roundedRect: drawingRect, xRadius: cornerRadius, yRadius: cornerRadius) let startColor = NSColor.blackColor() let endColor = NSColor.whiteColor() let gradient = NSGradient(startingColor: startColor, endingColor: endColor) gradient?.drawInBezierPath(bezierPath, angle: 90) } } let frameSAMGradient = CGRectMake(0, 0, 150, 150) let gradientView = SAMGradient(frame:frameSAMGradient) class SAMViewCTM: NSView { override func drawRect(dirtyRect: NSRect) { let pathRect = CGRectInset(self.bounds, self.bounds.size.width * 0.1, self.bounds.size.width * 0.1) let cornerRadius: CGFloat = 20.0 let rotationTransform = CGAffineTransformMakeRotation(CGFloat(M_PI) / 4.0) let rectanglePath = NSBezierPath(roundedRect: pathRect, xRadius: cornerRadius, yRadius: cornerRadius) let context = NSGraphicsContext.currentContext()!.CGContext CGContextSaveGState(context) CGContextConcatCTM(context, rotationTransform) NSColor.redColor().setFill() rectanglePath.fill() CGContextRestoreGState(context) } } let frameCTM = CGRectMake(0, 0, 100, 100) let viewCTM = SAMViewCTM(frame: frameCTM)
iOS :
//: Playground - noun: a place where people can play import UIKit /// iOS中绘制渐变 class SAMView: UIView { override func drawRect(rect: CGRect) { let colorSpace = CGColorSpaceCreateDeviceRGB() let context = UIGraphicsGetCurrentContext() let gradientStartColor = UIColor(red: 0.1, green: 0.1, blue: 0.8, alpha: 1) let gradientEndColor = UIColor(red: 1, green: 0.6, blue: 0.8, alpha: 1) let gradientColors: CFArray = [gradientStartColor.CGColor,gradientEndColor.CGColor] let gradientLocations :[CGFloat] = [0.0,1.0] let gradient = CGGradientCreateWithColors(colorSpace, gradientColors, gradientLocations) let pathRect = CGRectInset(self.bounds, 20, 20) let topPoint = CGPointMake(self.bounds.size.width / 2, 20) let bottomPoint = CGPointMake(self.bounds.size.width, self.bounds.size.height - 20) let roundeRectanglePath = UIBezierPath(roundedRect: pathRect, cornerRadius: 4) CGContextSaveGState(context) roundeRectanglePath.addClip() CGContextDrawLinearGradient(context, gradient, bottomPoint, topPoint, .DrawsAfterEndLocation) CGContextRestoreGState(context) } } let frame = CGRectMake(0, 0, 100, 100) let view = SAMView(frame: frame)
原文:http://www.cnblogs.com/wolfman4secret/p/5067415.html