iOS 简易的画板
来源:互联网 发布:aws云计算运维工程师 编辑:程序博客网 时间:2024/05/05 15:11
//截取制定view 将其转成UIImage
classfunc getAppImage(view:UIView) ->UIImage {
UIGraphicsBeginImageContext(view.frame.size)
let context =UIGraphicsGetCurrentContext()
view.layer.renderInContext(context!)
let screenimg:UIImage =UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return screenimg
}
///保存到相册
func showImage() {
drawimageView.image =AppDelegate.getAppImage(drawview)
iflet i = drawimageView.image {
UIImageWriteToSavedPhotosAlbum(i,nil, nil, nil)
}
}
class DrawView: UIView {
//声明一个贝塞尔曲线
var path:UIBezierPath!
var previousPoint:CGPoint!
///手势是否被激活
var panGRBool:Bool =false
overrideinit(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor =UIColor.whiteColor()
initGesture()
initBezierPath()
}
requiredinit?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
//创建一个拖动的手势
func initGesture() {
let pan =UIPanGestureRecognizer(target:self,action: #selector(DrawView.panGRclick(_:)))
pan.maximumNumberOfTouches =1
self.addGestureRecognizer(pan)
}
func initBezierPath() {
path =UIBezierPath()
}
///手势是否所以需要用被激活件 来进行初始的判断如果通过手势响应事件
因为刚开始滑动时不会相应sender.state == UIGestureRecognizerState.Began
势是否被所以需要用 touches 事件 来进行初始的判断如果通过 panGRBool 来判断是否拖动手势被激活
func panGRclick(sender:UIPanGestureRecognizer) {
let point = sender.locationInView(self)
let newpoint =getNewPoint(previousPoint, maxpo: point)
if sender.state ==UIGestureRecognizerState.Began {
panGRBool =true
path.addLineToPoint(point)
}elseif sender.state ==UIGestureRecognizerState.Changed {
iflet n = newpoint {
///画弧线
path.addQuadCurveToPoint(n, controlPoint:previousPoint)
}else {
path.addLineToPoint(point)
}
}
if sender.state ==UIGestureRecognizerState.Ended {
panGRBool =false
}
previousPoint = point
self.setNeedsDisplay()
}
overridefunc drawRect(rect: CGRect) {
UIColor.redColor().setStroke()
path.stroke()
}
func getNewPoint(minpo:CGPoint?,maxpo:CGPoint) ->CGPoint? {
iflet p = minpo {
returnCGPoint(
x: (p.x + maxpo.x)/2.0,
y: (p.y + maxpo.y)/2.0
)
}
returnnil
}
overridefunc touchesBegan(touches:Set<UITouch>, withEvent event:UIEvent?) {
if let touch = (touches as NSSet).anyObject() {
let point = touch.locationInView(self)
path.moveToPoint(point)
}
}
overridefunc touchesMoved(touches:Set<UITouch>, withEvent event:UIEvent?) {
if let touch = (touches as NSSet).anyObject() {
if !panGRBool {
let point = touch.locationInView(self)
path.addLineToPoint(point)
self.setNeedsDisplay()
}
}
}
}
- iOS 简易的画板
- 一个简易的彩色画板
- 简易画板
- 一个简易画板的实现(QWidget)-31
- 一个简易画板的实现(Graphics View)
- 一个简易画板的实现(Graphics View)
- 一个简易画板的实现(QWidget)
- 利用canvas制作最简易的画板
- iOS 画板的简单实现
- C# 简易画板
- matlab简易画板
- Android简易画板
- 自定义简易画板
- Android简易画板:
- javascript开发简易画板
- 简易画图画板
- QT简易画板练习
- 简易画板js
- 1007. Maximum Subsequence Sum (25)
- django连接mysql配置方法总结(转)
- LeetCode#3. Longest Substring Without Repeating Characters
- react-bits:Function As Children
- Android中不同类型多布局的展示BaseMultiItemQuickAdapter详解简单易学
- iOS 简易的画板
- HTML各版本DTD类型介绍及格式
- java生成N位随机数
- 移动web页面前端开发总结
- 请求参数获取
- java常见的排序方式
- FineReport中树数据集如何实现组织树报表
- linux查看端口
- leetcode 53. Maximum Subarray