2013-01-10 58 views
2

所以我似乎無法繪製2 CGMutablePathRef。代碼如下:問題與繪製兩個CGMutablePathRef

CGRect mainRect = CGRectMake(2, 2, rect.size.width-4, 210); 
    CGMutablePathRef mainPathRef = createRoundedRectForRect(mainRect, 4); 

    if (self.imageExists_){ 

     [[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0] set]; 

     CGContextAddPath(context, mainPathRef); 
     CGContextClip(context); 
     UIGraphicsBeginImageContext(mainRect.size); 

     //need to flip the images to that it is drawn appropriately as CALayer uses a different coordinate system 
     CGContextSaveGState(context); 
     CGContextTranslateCTM(context, 0.0, 210); 
     CGContextScaleCTM(context, 1.0, -1.0); 
     CGContextDrawImage(context, mainRect, self.highlightItem_.highlightStoryImage.CGImage); 

     UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     [scaledImage drawAtPoint:CGPointMake(0, 0)]; 
     CGContextRestoreGState(context); 

這會在我指定的路徑上繪製圖像,並進行裁剪。但後來我想提請其下另一圓角的矩形,所以我所做的:

[[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0] set]; 

    CGFloat colors [] = { 
    0.20, 0.20, 0.20, 1.0, 
    0.17, 0.17, 0.17, 1.0 
    }; 

    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB(); 
    CGGradientRef gradient = CGGradientCreateWithColorComponents(baseSpace, colors, NULL, 2); 
    CGColorSpaceRelease(baseSpace), baseSpace = NULL; 

    CGContextSaveGState(context); 

    CGRect commentRect = CGRectMake(2, 215, rect.size.width-4, rect.size.height - 215); 
    CGMutablePathRef pathRef = createRoundedRectForRect(commentRect, 3); 

    CGContextAddPath(context, pathRef); 
    CGContextClip(context); 

    CGPoint startPoint = CGPointMake(CGRectGetMidX(commentRect), CGRectGetMinY(commentRect)); 
    CGPoint endPoint = CGPointMake(CGRectGetMidX(commentRect), CGRectGetMaxY(commentRect)); 

    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0); 
    CGGradientRelease(gradient), gradient = NULL; 

    CGContextRestoreGState(context); 

    CGContextAddPath(context, pathRef); 
    CGContextDrawPath(context, kCGPathStroke); 

知道爲什麼這不起作用?

+1

不起作用?怎麼樣?你得到了什麼? –

+0

我沒有看到第二條圓形路徑。只看到第一個。其實當我刪除它的圖像繪製它的工作。想知道爲什麼 – adit

回答

0

您已將圖形剪切到第一個矩形,但在第二次繪製之前沒有重置剪切路徑。我相信你需要在第一個裁剪路徑被調用之前保存圖形狀態。

你的第一個片段應該是這個樣子:

CGContextSaveGState(...); 
CGContextAddPath(...); 
CGContextClip(...); 
UIGraphicsBeginImageContext(...); 
... rest of your drawing code... 
CGContextRestoreGState(...); 

,然後第二個代碼段。

+0

你指的是哪一行? – adit

+0

我用一些代碼更新了上面的答案,以顯示我的意思。 – user1118321