您的位置:首页 > 产品设计 > UI/UE

IOS UI画线

2015-09-27 13:04 489 查看
首先先删除故事板里面默认的 viewcontroller文件,添加一个Navigation controller文件

插入一个Table View Cell

在拖入一个viewcontroller

按住control点击刚插入的Table View Cell 拖入viewcontroller选择push

新建UIView类文件

然后在故事版中选择刚才拖入的viewcontroller属性 选择这个类

在类中先写

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}


画线代码

override func drawRect(rect: CGRect) {
// Drawing code

var context = UIGraphicsGetCurrentContext()

CGContextMoveToPoint(context, 100, 100)
CGContextAddLineToPoint(context, 150, 100)

CGContextMoveToPoint(context, 200, 100)
CGContextAddLineToPoint(context, 200, 200)

CGContextSetRGBStrokeColor(context, 1, 0, 1, 1) //颜色

CGContextSetLineWidth(context, 5)  //宽度

CGContextStrokePath(context)
}




如图

添加矩形

添加viewcontroller和类文件和上面一样

绑定类后

在文件中同样要先写一下

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}


之后在drawRect函数中写

override func drawRect(rect: CGRect) {

var context = UIGraphicsGetCurrentContext()

CGContextAddRect(context, CGRect(x: 100, y: 100, width: 100, height: 100))//添加一个矩形

CGContextSetRGBFillColor(context, 1, 0, 0, 1)//颜色

CGContextFillPath(context)//填充

CGContextSetLineWidth(context, 5)//线条宽度

CGContextSetRGBStrokeColor(context, 1, 1, 0, 1)//填充颜色

CGContextStrokeRect(context, CGRect(x: 100, y: 100, width: 100, height: 100))

// Drawing code
}




绘制园

创建类之前步奏同上,绘制园有两种方法,一种是通过画弧完成,另一种是通过绘制一个矩形,与这个矩形外切的园即所得。

override func drawRect(rect: CGRect) {
// Drawing code

//第一种绘制方法
//==================================================

var context = UIGraphicsGetCurrentContext()

//        CGContextAddArc(context, 100, 100, 50, 0, 3.14, 0)

CGContextAddArc(context, 200, 200, 100, 0, 3.14*2, 0)  //画一条弧 x,y,半径,起始角度,终止角度,顺时针0逆时针1
CGContextSetLineWidth(context, 10)   //线条宽度

CGContextStrokePath(context)

//=============填充颜色

CGContextAddArc(context, 200, 200, 100, 0, 6.28, 0)

CGContextSetRGBFillColor(context, 1, 1, 0, 1)

CGContextFillPath(context)

//第二种绘制方法
//==================================================

//椭圆形绘制方法 CGRect中放正方形就是圆形,矩形就是椭圆形

CGContextAddEllipseInRect(context, CGRect(x: 50, y: 350, width: 200, height: 100))

CGContextStrokePath(context)

CGContextAddEllipseInRect(context, CGRect(x: 200, y: 500, width: 100, height: 100))

CGContextStrokePath(context)

}

}




绘制一张图片

同样要添加类,同以上步奏

接着在Images.xcassets 里面放一张图片,这里这张图片的名字为“2”

在类文件中添加

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

UiImage = UIImage(named: "2")!.CGImage
}

var UiImage:CGImageRef?


此时初始化比之前多了一行。

在调整的时候需要进行存储与释放,否则会影响到后面要绘制的元素。取消注释可以看到差别。

override func drawRect(rect: CGRect) {

// Drawing code

var context = UIGraphicsGetCurrentContext()

//=====================
CGContextSaveGState(context)        //状态的存储

CGContextTranslateCTM(context, 10, 400)     //状态的调整
CGContextScaleCTM(context, 1, -1)           //缩放

CGContextDrawImage(context, CGRect(x: 50, y: -100, width: 200, height: 350),UiImage )

CGContextRestoreGState(context)         //状态恢复
//存储与恢复是为了保证不会因为对context的调整影响到后面的绘制某一个元素的时候影响其他元素,只要有调整,在调整前要保存,调整后释放
//=======================

//        CGContextStrokeRect(context, CGRect(x: 100, y: 100, width: 100, height: 100))

}




最后是绘制画板

同样添加类与初始化之前都一样

在类中定义路径

var path = CGPathCreateMutable()

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

var p = (touches as NSSet).anyObject()?.locationInView(self)

CGPathMoveToPoint(path, nil, p!.x, p!.y)
}//触摸开始

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {

var p = (touches as NSSet).anyObject()?.locationInView(self)
CGPathAddLineToPoint(path, nil, p!.x, p!.y)

setNeedsDisplay()

}//触摸移动


drawRect代码如下

override func drawRect(rect: CGRect) {

//        var context = UIGraphicsGetCurrentContext()
//
//        var path = CGPathCreateMutable()    //创建存储路径
//        CGPathMoveToPoint(path, nil, 200, 200)//起始点
//        CGPathAddLineToPoint(path, nil, 100, 100)//移动点
//
//        CGContextAddPath(context, path)
//        CGContextStrokePath(context)
// Drawing code

var context = UIGraphicsGetCurrentContext()
CGContextAddPath(context, path)
CGContextStrokePath(context)

}




完整的界面如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: