绘制自定义图形?
1、初始化View,包括属性横轴间隔&纵轴间隔&
(设置空白View准备画画+设置当前笔头颜色+设置当前画笔粗细+设置画笔初始位置+设置画笔终点,传入context绘制长方形)——
CGContextStrokePath(context)
CGContextSetLineWidth设置线的宽度。
CGContextStrokeRect绘制长方形。
CGContextSetRGBStrokeColor设置当前画笔的颜色。
CGContextSetRGBFillColor设置填充颜色。
CGContextFillPath(ctx);//设置填充的路径。
CGContextStrokePath绘制一个框,不填充。
CGContextClearRect橡皮擦,去掉一个矩形的内容。
CGContextStrokeRect绘制一个矩形框,未填充。
CGContextAddRect绘制一个实心矩形区域,框采用画笔颜色,填充采用填充色,默认的填充色是黑色。
ios里面的绘制,在UIView中有个自带的方法- (void)drawRect:(CGRect)rect实现,实现的过程可以跟现实生活中的绘画过程相对比,例如如何画一条直线,1.要准备一张纸,用于画画;2.要准备一支画笔,能选择笔头的颜色,花笔的粗细;3.想好所画线的起始点;4。动手画下来
只有在View的drawRect方法中才能取得跟View相关联的图形上下文,将会随着View调用而被调用。每一个View中都有一个layer(图层)属性,通过View里面的drawRect方法就能取得View的Layer Graphics Context(图层图形上下文),从而可以在View的layer上绘制图形,要知道,本质上所有我们可以见到的View视图都是基于底层的layer实现。只不过比起我们自定义的图形来说,多了一个用户交互的事件触发。
本质上我们所见到的Button、Label、Image都是苹果的开发工程师自己底层提前为我们在view的底层Layer图层画好了图形样式,我们要向使用官方不曾有过的图形样式,就必须通过重写drawRect方法来实现。
iOS两种绘图(包括文字、图像、渐变)方法?
1、使用原生的drawing技术,包括Core Graphics和UIKit框架,只支持2D 绘图。
2、另一种方法使用OpenGL ES,2D 和3D都支持
UIView和layer的联系?
所有的View都是由底层的Layer来驱动,我们表面上改变的是View的属性,其实本质上还是得Layer发生了改变。比如说Frame发生了改变,还会出现一些动作改变时的动画。所以执行动画的时候,必须改变layer的属性。尽管我们的Layer没有可见的外观,但它依然需要被添加到屏幕上的视图层级里,以便动画能正常工作。
关键帧制作gif动画?
__block CGPoint center = view.center;
[UIView addKeyframeWithRelativeStartTime: 0 relativeDuration: 0.1 animations: ^{
view.center = (CGPoint){ center.x + 15, center.y + 80 };
}];
关键帧动画的options参数?
UIViewKeyframeAnimationOptionCalculationModeLinear // 连续运算模式,线性
UIViewKeyframeAnimationOptionCalculationModeDiscrete // 离散运算模式,只显示关键帧
UIViewKeyframeAnimationOptionCalculationModePaced // 均匀执行运算模式,线性
UIViewKeyframeAnimationOptionCalculationModeCubic // 平滑运算模式,贝塞尔曲线让动画更加平滑
UIViewKeyframeAnimationOptionCalculationModeCubicPaced // 平滑均匀运算模式
通过CGAffineTransform设置View层的transfrom属性创建平面动画?
1、CGAffineTransTranslate平移
2、CGAffineTransformScale缩放
注意:如果使用CGAffineTransformScale从1变到0,动画提交之后,会直接保持动画结束的状态,想让View变小,只需设为0.1的比例就行
3、CGAffineTransformMakeRotation旋转(角度*M_PI/180)
4、CGAffineTransformInvert(transform)逆动画
5、CGAffineTransformIdentity
6、CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2)两个平面变换效果同时进行
通过CATransform3D设置layer层的transfrom属性展示3D效果?
1、导入QuartzCore.framework
2、CATransform3DMakeRotation(M_PI/6, 0, 1, 0)表示Y轴旋转30°