//: 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