/*
rect(x,y,width,height);
width, height正负代表了从原点的绘制方向,矩形的长宽都是取得绝对值
*/
// do any additional setup after loading the view, typically from a nib.
#pragma mark -------------------------------------------生成cgrect---------------------------------------
cgrect originalrect = cgrectmake(80.44, 30.66, 100.77, 95.88);
nslog(@"originalrect = %@",nsstringfromcgrect(originalrect));
//
cgrectinfinite 用法
/*
生成无穷大矩形
nslog(@"infiniterect = %@",nsstringfromcgrect(cgrectinfinite));
cgrectnull 用法
nslog(@"nullrect = %@",nsstringfromcgrect(cgrectnull));
//cgrectzero
用法
cgrectmake(0, 0, 0, 0)
nslog(@"zerorect = %@",nsstringfromcgrect(cgrectzero));
cgrectinset 用法
cgrect insetrect = cgrectinset(originalrect, 1, 2);
cgrectinset(originalrect, dx, dy);
insetrect.origin.x = originalrect.origin.x + dx ;
insetrect.origin.y = originalrect.origin.y + dy;
insetrect.size.width = originalrect.size.width - 2 * dx;
insetrect.size.height = originalrect.size.height - 2 * dy;
nslog(@"insetrect = %@",nsstringfromcgrect(insetrect));
//cgrectoffset
cgrect offsetrect = cgrectoffset(originalrect, -1, -2);
cgrectoffset(originalrect, dx, dy);
insetrect.origin.x = originalrect.origin.x + dx ;
insetrect.origin.y = originalrect.origin.y + dy;
insetrect.size.width = originalrect.size.width;
insetrect.size.height = originalrect.size.height;
nslog(@"offsetrect = %@",nsstringfromcgrect(offsetrect));
//cgrectintegral
将origin值向下调整到最近整数,size向上调整到最近整数,使生成的cgrect可以完全包含原来的cgrect.
cgrect integralrect = cgrectintegral(originalrect);
nslog(@"integralrect = %@",nsstringfromcgrect(integralrect));
//cgrectstandardize
cgrectstandardize(testrect)
standardizerect.size.width = fabsf(testrect.size.width)//testrect.size.width 的绝对值
standardizerect.size.height = fabsf(testrect.size.height)//testrect.size.height 的绝对值
cgrect testrect = cgrectmake(-5.5, -6.6, -7.7, -8.8);
cgrect standardizerect = cgrectstandardize(testrect);
nslog(@"standardizerect = %@",nsstringfromcgrect(standardizerect));
//cgrectunion
cgrectunion(rect1,rect2) 返回值是能够包含两个矩形的最小矩形
unionresultrect.origin.x = min(rect1.origin.x, rect2.origin.x);
unionresultrect.origin.y = min(rect1.origin.y, rect2.origin.y);
unionresultrect.size.width = min(rect1.origin.y, rect2.origin.y);
unionresultrect.size.height = min(rect1.origin.y, rect2.origin.y);
cgrect unionrect1 = cgrectmake(100, 50, 60, 70);
cgrect unionrect2 = cgrectmake(180, 20, 30, 40);
cgrect unionrect3 = cgrectmake(120, 80, 80, 90);
cgrect unionresultrect1 = cgrectunion(unionrect1, unionrect2);
cgrect unionresultrect2 = cgrectunion(unionrect1, unionrect3);
nslog(@"unionresultrect1 = %@, unionresultrect2 = %@",nsstringfromcgrect(unionresultrect1),nsstringfromcgrect(unionresultrect2));
//cgrectintersection
cgrectintersection(rect1, rect2)
求两个矩形的交集,返回结果是两个矩形相交的区域,如果没有交集的话,返回值是nsnullrect
cgrect interrect1 = cgrectmake(100, 50, 60, 70);
cgrect interrect2 = cgrectmake(180, 20, 30, 40);
cgrect interrect3 = cgrectmake(120, 80, 80, 90);
cgrect intersectionrect1 = cgrectintersection(interrect1, interrect2);
cgrect intersectionrect2 = cgrectintersection(interrect1, interrect3);
nslog(@"intersectionrect1 = %@, intersectionrect2 = %@",nsstringfromcgrect(intersectionrect1),nsstringfromcgrect(intersectionrect2));
#pragma mark ------------------------------------------获取x,y,width,height---------------------------------------------------
//cgrectgetminx(originalrect),cgrectgetmidx(originalrect),cgrectgetmaxx(originalrect),cgrectgetminy(originalrect),cgrectgetmidy(originalrect),cgrectgetmaxy(originalrect)
, cgrectgetwidth(originalrect), cgrectgetheight(originalrect)用法
minx = originalrect.origin.x;
midx = (minx + maxx)/2;
maxx = (originalrect.origin.x + originalrect.size.width);
miny = originalrect.origin.y;
midy = (miny + maxy)/2;
maxy = (originalrect.origin.y + originalrect.size.height);
width = originalrect.size.width;
height = originalrect.size.height;
nslog(@"minx = %f, midx = %f, maxx = %f, miny = %f, midy = %f, maxy = %f, width = %f, height = %f",cgrectgetminx(originalrect),cgrectgetmidx(originalrect),cgrectgetmaxx(originalrect),cgrectgetminy(originalrect),cgrectgetmidy(originalrect),cgrectgetmaxy(originalrect),cgrectgetwidth(originalrect),
cgrectgetheight(originalrect));
//cgrectgetwidth(originalrect),
cgrectgetheight(originalrect),用法
nslog(@"width = %f, height = %f",cgrectgetwidth(originalrect), cgrectgetheight(originalrect));
#pragma mark -----------------------------------------nsstring 与 cgrect 转换-----------------------------------------------
//nsstring 与 cgrect 转换
nsstring *originalrectstr = nsstringfromcgrect(originalrect);
cgrect rectfromstr = cgrectfromstring(originalrectstr);
nslog(@"originalrectstr = %@, rect = %@",originalrectstr,nsstringfromcgrect(rectfromstr));
#pragma mark -----------------------------------------cgrect 与 nsdictionary 转换---------------------------------------------
//.cgrect与nsdictionary转换
cfdictionaryref framedictref = cgrectcreatedictionaryrepresentation(originalrect);
nsdictionary *framedict = [nsdictionary dictionarywithdictionary:(nsdictionary*)cfbridgingrelease(framedictref)]; // autoreleased
cgrect rectfromdic;
cgrectmakewithdictionaryrepresentation((cfdictionaryref)framedict, &rectfromdic);
nslog(@"framedict = %@, rectfromdic = %@",framedict, nsstringfromcgrect(rectfromdic));
#pragma mark -----------------------------------------cgrect 与 nsvalue 转换---------------------------------------------
//. cgrect与nsvalue转换
在nsarray,nsdictionary容器中只能存储objetive-c对象,不能直接存储c结构体,所有需要存储矩形时,需要将其转换为nsvalue值。
nsvalue *originalrectvalue = [nsvalue valuewithcgrect:originalrect];
cgrect valuerect = [originalrectvalue cgrectvalue];
nslog(@"originalrectvalue = %@, valuerect = %@",originalrectvalue, nsstringfromcgrect(valuerect));
#pragma mark -----------------------------------------判断---------------------------------------------
//cgrectequaltorect
cgrectequaltorect(cgrect rect1, cgrect rect2)
rect1 与 rect2 的origin,size 完全相同 ,返回yes;否则,返回no;
if (cgrectequaltorect(unionrect1, unionrect2)) {
nslog(@"相同");
} else {
nslog(@"不相同");
}
//cgrectisempty(cgrect
rect)
rect的宽度和高度只要有一个就会被定为emptyrect
cgrect emptyrect = cgrectmake(0, 10, 0, 20);
if (cgrectisempty(emptyrect)) {
nslog(@"是 emptyrect");
nslog(@"不是 emptyrect");
//cgrectisnull(cgrect
rect 是nsnullrect 返回true
if (cgrectisnull(originalrect)) {
nslog(@"是 nsnullrect ");
nslog(@"不是 nsnullrect ");
//cgrectisinfinite(cgrect
判断是不是无穷大矩形
if (cgrectisinfinite(originalrect)) {
nslog(@"是 无穷大 ");
nslog(@"不是 无穷大 ");
//cgrectcontainspoint(cgrect rect, cgpoint point)
判断rect 是不是包含 point 这个点
cgpoint position = cgpointmake(100, 100);
if (cgrectcontainspoint(originalrect, position)) {
nslog(@" rect 包含 point");
nslog(@" rect 不包含 point");
//cgrectcontainsrect(cgrect rect1, cgrect rect2)
判断 rect2 是不是在 rect1 里面
if (cgrectcontainsrect(unionrect1, unionrect2)) {
nslog(@" rect1 包含 rect2");
nslog(@" rect1 不包含 rect2");
//cgrectintersectsrect(cgrect rect1, cgrect rect2)
判断 rect1 与 rect2 是不是有交集
if (cgrectintersectsrect(unionrect1, unionrect2)) {
nslog(@" rect1 与 rect2 有交集");
nslog(@" rect1 与 rect2 没有交集");