] to floats [0.0..1.0] CGFloat red = (CGFloat)pixelData[0] / 255.0f; CGFloat green = (CGFloat )pixelData[1] / 255.0f; CGFloat blue = (CGFloat)pixelData[2] / 255.0f; CGFloat alpha = (CGFloat *)red green:(nullable CGFloat *)green blue:(nullable CGFloat *)blue alpha:(nullable CGFloat *)alpha ax_getRGBAWithPoint:point completion:^(CGFloat red,CGFloat green,CGFloat blue,CGFloat alpha){ // 在这里直接用 ax_getRGBAFromCircleWithPoint:point completion:^(CGFloat red,CGFloat green,CGFloat blue,CGFloat alpha
(CGMutablePathRef path,const CGAffineTransform * m, CGFloat cpx, CGFloat cpy,CGFloat x, CGFloat y); / , CGFloat cp1y,CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y); //这个方法用于闭合路径 调用这个方法后 路径最后的端点将和起点闭合 x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, bool clockwise); //向路径中追加一组圆弧 /* x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat delta); //向路径中追加一段圆弧 弧线是以(x1,y1)到(x2,y2)为切线的弧线 CGFloat x2, CGFloat y2, CGFloat radius); //向路径中追加一段路径 void CGPathAddPath(CGMutablePathRef path1,const
leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing bottomSpacing:(CGFloat)bottomSpacing leadSpacing:(CGFloat leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing bottomSpacing:(CGFloat)bottomSpacing leadSpacing:(CGFloat
UIKit/UIKit.h> @class YJWaterFlowLayout; @protocol YJWaterFlowLayoutDelegate <NSObject> @required -(CGFloat ; /** 列间距*/ -(CGFloat)columnMarginInWaterFlowLayout:(YJWaterFlowLayout *)waterFlowLayout; /** 行间距*/ - (CGFloat)rowMarginInWaterFlowLayout:(YJWaterFlowLayout *)waterFlowLayout; /** 边缘之间的间距*/ -(UIEdgeInsets )rowMargin; /** 每一列之间的间距*/ -(CGFloat)columnMargin; /** 列数*/ -(NSInteger)columnCount; /** 边缘之间的间距*/ -( UIEdgeInsets)edgeInsets; /** 内容的高度*/ @property (nonatomic, assign) CGFloat maxColumnHeight; @end @
)hitScale{ CGFloat width = self.bounds.size.width * hitScale; CGFloat height = self.bounds.size.height )hitScale{ CGFloat width = self.bounds.size.width; CGFloat height = self.bounds.size.height * )hitHeightScale{ CGFloat width = self.bounds.size.width; CGFloat height = self.bounds.size.height ) floatValue]; } -(CGFloat)hitWidthScale{ return [objc_getAssociatedObject(self, kHitWidthScale) floatValue]; } -(CGFloat)hitHeightScale{ return [objc_getAssociatedObject(self, kHitHeightScale
NSArray *)fontNamesForFamilyName:(NSString *)familyName; //设置普通字体字号大小 + (UIFont *)systemFontOfSize:(CGFloat :(CGFloat)fontSize; //一些只读属性 //字体家族名称 @property(nonatomic,readonly,retain) NSString *familyName; //字体名称 pointSize; //字体设计模型,表示距离最高点偏移余量 @property(nonatomic,readonly) CGFloat ascender; //底部的模型偏移量 CGFloat capHeight; //字体模型的xHeight信息 @property(nonatomic,readonly) CGFloat xHeight; //字体行高 ,readonly) CGFloat leading; //创建一个新字体与当前字体相同,除了指定的大小 - (UIFont *)fontWithSize:(CGFloat)fontSize
本节学习目标 如何将屏幕2D坐标转换至3D游戏场景中去 oc 源码 - (SCNVector3)convertToScenOfPoint:(CGPoint)point { CGFloat Z_Far = 0.1; CGFloat Screen_Aspect = [UIScreen mainScreen].bounds.size.width > 400 ? ; float x = -(CGFloat)X + point.x * alphaX; float y = (CGFloat)Y - point.y * alphaY; SCNVector3 = 0.1 var Screen_Aspect : CGFloat = UIScreen.main.bounds.size.width > 400 ? -CGFloat(X) + point.x * alphaX let y = CGFloat(Y) - point.y * alphaY let target = SCNVector3Make
我们先来看下CATransform3D的头文件 struct CATransform3D { CGFloat m11, m12, m13, m14; CGFloat m21, m22, m23, m24; CGFloat m31, m32, m33, m34; CGFloat m41, m42, m43, m44; }; typedef struct CATransform3D CATransform3D tx, CGFloat ty, CGFloat tz); //生成一个依照参数平移转换后的矩阵 CA_EXTERN CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz); //生成一个依照参数缩放后的CA_EXTERN CATransform3D CATransform3DMakeRotation (CGFloat angle, CGFloat x, CGFloat y, CGFloat z);//生成一个依照参数旋转后的矩 我们先看一个简单的例子, 实现一个矩形向内翻转 ?
= 0.0 var prevDy: CGFloat = 0.0 var curDx: CGFloat = 0.0 var curDy curDx = CGFloat(next.x - prev.x) * intensity curDy = CGFloat(next.y - prev.y) * intensity (cur.x), y: CGFloat(cur.y) * CGFloat(phaseY)), control1: CGPoint( x: CGFloat(prev.x) + prevDx, y: (CGFloat(prev.y ) + prevDy) * CGFloat(phaseY)), control2: CGPoint( x: CGFloat
self.thumbSize.height : self.partSize.height; CGFloat sliderHeight = self.sliderBarHeight; CGFloat sliderMargin = sliderHeight/2 + tmp/2; CGFloat sliderY = CGRectGetHeight(self.frame)/ 2; CGFloat sliderWidth = CGRectGetWidth(self.frame) - 2 * sliderMargin - tmp; self.sliderRect partPointWidth = self.partSize.width; CGFloat partPointHeight = self.partSize.height; CGFloat lastObject] CGRectValue].origin.x; CGFloat wid = lastx - firstx; CGFloat part = wid/(self.numberOfPart
a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty); //创建平移变换 CGAffineTransform CGAffineTransformMakeTranslation (CGFloat tx, CGFloat ty); //创建缩放变换 CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy ); //创建旋转变换 CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle); //判断某个变化是否是来自标准矩阵的变换 bool tx, CGFloat ty); //对某个变换矩阵进行缩放变换 CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy); //对某个变换矩阵进行旋转变换 CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat
一、几个常用结构体 struct CGPoint { CGFloat x; CGFloat y; }; 定义一个点,设置x坐标和y坐标 struct CGSize { CGFloat width; CGFloat height; }; 定义一个尺寸,设置宽度和高度 struct CGVector { CGFloat dx; CGFloat dy; }; 定义一个二维矢量 struct CGRect (CGFloat width, CGFloat height); 创建一个尺寸 CGVectorMake(CGFloat dx, CGFloat dy); 创建一个矢量 CGRect CGRectMake (CGFloat x, CGFloat y, CGFloat width, CGFloat height); 创建一个矩形 CGFloat CGRectGetMinX(CGRect rect); 获得矩形最左边的 x值 CGFloat CGRectGetMidX(CGRect rect); 获取矩形中点的x值 CGFloat CGRectGetMaxX(CGRect rect); 获取矩形最右端的x值 CGFloat
gray, CGFloat alpha); //创建RGB色彩空间下的颜色 CGColorRef CGColorCreateGenericRGB(CGFloat red, CGFloat green , CGFloat blue, CGFloat alpha); //创建CMYB印刷模式色彩空间下的颜色 CGColorCreateGenericCMYK(CGFloat cyan, CGFloat magenta , CGFloat yellow, CGFloat black, CGFloat alpha); //获取颜色常量 /* colorName定义如下: //标准白色 CFStringRef kCGColorWhite CGColorSpaceCreateCalibratedRGB(const CGFloat whitePoint[3], const CGFloat blackPoint[3], const CGFloat (const CGFloat whitePoint[3], const CGFloat blackPoint[3], const CGFloat range[4]); //使用ICC文件创建ICC-based
矩阵的基本知识 struct CGAffineTransform { CGFloat a, b, c, d; CGFloat tx, ty; }; CGAffineTransform CGAffineTransformMake (CGFloat a,CGFloat b,CGFloat c,CGFloat d,CGFloat tx,CGFloat ty); 为了把二维图形的变化统一在一个坐标系里,引入了齐次坐标的概念,即把一个图形用一个三维矩阵表示 CGAffineTransform CGAffineMakeTranslation(CGFloat tx,CGFloat ty) 第二种: 设b=c=tx=ty=0. sx, CGFloat sy) 的计算原理。 把当前中心点移动到你想要的点即可 , 例如, 把锚点放在相对控件原点(0,0) //设置开始状态 CGFloat offsetX = 0 - view.size.width/2; CGFloat offsetY
)deltaX y:(CGFloat)deltaY z:(CGFloat)deltaZ duration:(NSTimeInterval)duration; + (SCNAction *)moveBy )xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval)duration; + (SCNAction *)rotateByAngle :(CGFloat)angle aroundAxis:(SCNVector3)axis duration:(NSTimeInterval)duration; b. 旋转到指定的位置 + (SCNAction *)rotateToX:(CGFloat)xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval )duration; + (SCNAction *)rotateToX:(CGFloat)xAngle y:(CGFloat)yAngle z:(CGFloat)zAngle duration:(NSTimeInterval
. // #import "UIView+Frame.h" @implementation UIView (Frame) - (void)setX:(CGFloat)x { CGRect ; } - (void)setY:(CGFloat)y { CGRect frame = self.frame; frame.origin.y = y; self.frame = frame; } - (CGFloat)y { return self.frame.origin.y; } - (CGFloat)width { return self.frame.size.width ; } - (void)setWidth:(CGFloat)width { CGRect frame = self.frame; frame.size.width = width; self.frame = frame; } - (CGFloat)height { return self.frame.size.height; } - (void)setHeight
cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y); //向路径中添加二次贝塞尔曲线 void CGContextAddQuadCurveToPoint (CGContextRef cg_nullable c, CGFloat cpx, CGFloat cpy, CGFloat x, CGFloat y); //闭合路径 void CGContextClosePath (CGContextRef cg_nullable c, CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2, CGFloat radius); //直接向上下文中添加一个路径对象 cyan, CGFloat magenta, CGFloat yellow, CGFloat black, CGFloat alpha); void CGContextSetCMYKStrokeColor (CGContextRef cg_nullable c, CGFloat cyan, CGFloat magenta, CGFloat yellow, CGFloat black, CGFloat alpha
)wid btnTitlePadding_X:(CGFloat)horizontailX btnTitlePadding_Y:(CGFloat)vertailY marginX:(CGFloat)marginX marginY:(CGFloat)marginY itemHeight:(CGFloat)height; #pragma mark - 设置字符串数组 (该方法必须在setWid...方法后执行) _horizontailX; // btn的左右间距 CGFloat _vertailY; // btn的上下间距 CGFloat _marginX; // tagView的左右边距 CGFloat _marginY; // tagVIew的上下边距 CGFloat _wid; // tagView的宽度 CGFloat _itemHeight )wid btnTitlePadding_X:(CGFloat)horizontailX btnTitlePadding_Y:(CGFloat)vertailY marginX:(CGFloat)marginX
. // #import <UIKit/UIKit.h> @interface UILabel (Size) + (CGFloat)getHeightByWidth:(CGFloat)width title:(NSString *)title font:(UIFont*)font; + (CGFloat)getWidthWithTitle:(NSString *)title font:(UIFont :(CGFloat)width title:(NSString *)title font:(UIFont *)font { UILabel *label = [[UILabel alloc height = label.frame.size.height; return ceil(height); } + (CGFloat)getWidthWithTitle:(NSString 参考答案: -(CGFloat)getSpaceLabelHeight:(NSString*)str withFont:(UIFont*)font withWidth:(CGFloat)width {
-(void)drawRect:(CGRect)rect{ CGGradientRef gradientRef; CGColorSpaceRef colorSpaceRef; CGFloat locs[2] = {0,1}; CGFloat colors[8] = { 1.0, 0, 0, 1.0, // 前4个为起始颜色的rgba 0, 1, 0, 1.0 }; * cg_nullable components, const CGFloat * __nullable locations, size_t count); //创建CGGradientRef startRadius, CGPoint end, CGFloat endRadius, CGFunctionRef cg_nullable function, bool extendStart locs[2] = {0,1}; CGFloat colors[8] = { 1.0, 0, 0, 1.0, // 前4个为起始颜色的rgba 1, 1, 1, 1.0 };