天天看点

ios CGRec用法

/*

     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 没有交集");