自我混乱

时间:2012-02-27 13:19:13

标签: ios core-graphics

在此代码中

  

CGRect contextRect = self.bounds;

会参考哪个绑定? rectangle,imageRect或整个iOS视图。

我正在尝试使用quartz2D操作图像,我通过查看不同的示例创建了此代码,并且//之间编写的代码来自Apple Quartz2D指南绘制文本。

提前致谢, 问候。

    - (void)drawRect:(CGRect)rect
    {
        CGSize cgs = CGSizeMake(250.0, 400.0);
        UIGraphicsBeginImageContext(cgs);

        CGRect rectangle = CGRectMake(0,0,cgs.width,cgs.height);
        CGRect imageRect = CGRectInset(rectangle, 5.4, 5.4);
        imageRect.size.height -= 100;

        UIImage *myImage = [UIImage imageNamed:@"pumpkin.jpg"]; 
        [myImage drawInRect:imageRect];    

        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetLineWidth(context, 10.0);
        CGContextSetRGBStrokeColor(context, 0.0, 0.0, 1.0, 1.0);
        CGContextStrokeRect(context, rectangle);

        //    

        CGRect contextRect = self.bounds;

        CGContextTranslateCTM(context, 0, contextRect.size.height);
        CGContextScaleCTM(context, 1, -1);

        float w, h;
        w = contextRect.size.width;
        h = contextRect.size.height;

        CGAffineTransform myTextTransform;
        CGContextSelectFont (context, "Helvetica-Bold", h/10, kCGEncodingMacRoman);
        CGContextSetCharacterSpacing (context, 10);
        CGContextSetTextDrawingMode (context, kCGTextFillStroke);

        CGContextSetRGBFillColor(context, 0, 1, 0, .5);
        CGContextSetRGBStrokeColor(context, 0, 0, 1, 1);
        myTextTransform =  CGAffineTransformMakeRotation(0);
        CGContextSetTextMatrix(context, myTextTransform);
        CGContextShowTextAtPoint(context, 0, 50, "Quartz 2D", 9);

        //    

        UIImage *testImg =  UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        [testImg drawAtPoint:CGPointMake(35, 10)];
}

1 个答案:

答案 0 :(得分:7)

self.frame表示其父视图坐标系中视图的坐标和大小。

self.bounds表示视图在其坐标系中的坐标和大小。因此它始终与width具有相同的heightself.frame,但xy等于0

self.bounds等于CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)

所以你的代码:

CGRect contextRect = self.bounds;

与:

相同
CGRect contextRect = rect;