2013-03-25 123 views
1

我用這個代碼做了一個圓形遮罩效果:圈遮罩效果

CGContextRef context = CGBitmapContextCreate(NULL, self.bounds.size.width, self.bounds.size.height, 8, 4 * self.bounds.size.width, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedFirst); 
CGContextAddArc(context, 1024/2, 768/2, size, 0, 6.3, 0); 
CGContextClosePath(context); 
CGContextClip(context); 
CGContextDrawImage(context, self.bounds, imageView.image.CGImage); 
CGImageRef imageMasked = CGBitmapContextCreateImage(context); 
CGContextRelease(context); 
UIImage *newImage = [UIImage imageWithCGImage:imageMasked]; 
CGImageRelease(imageMasked); 

[imageView setImage:newImage]; 
UIGraphicsEndImageContext(); 

當我設置size--,圓縮小與價值,但是當我設置size++圈沒有變焦與價值。到底是怎麼回事? enter image description here

+0

這不回答你的問題,但可能是值得一瀏覽:[添加上的UIImageView一圓掩膜層(http://stackoverflow.com/questions/14670985/adding-a-circle-mask-layer-上-AN-的UIImageView/15429140#15429140)。一個圓形掩模被添加到可以擴展,並通過用戶交互收縮的圖像。這是非常高效的。 – 2013-03-25 08:41:49

+0

如果你想在掩蓋然後u必須始終掩蓋它放大效應,否則只是放大/縮小圖像包含圖像 – DivineDesert 2013-03-25 09:06:11

+0

@ElliottPerry好的觀察!感謝您的幫助:) – 2013-03-25 09:46:37

回答

2

我想不會設置原始圖像首先是你的問題。 我測試你的代碼一點點,使工作方式有兩種:

- (IBAction)minus:(id)sender { 
    self.radius = @([self.radius floatValue]+10.0f); 
    [self redrawImage]; 
} 

- (IBAction)plus:(id)sender { 
    self.radius = @([self.radius floatValue]-10.0f); 
    [self redrawImage]; 
} 

-(void)redrawImage 
{ 
    //set the original image first 
    [_imageView setImage:[UIImage imageNamed:@"your image goes here"]]; 

    CGFloat size = [self.radius floatValue]; 
    CGContextRef context = CGBitmapContextCreate(NULL, self.view.bounds.size.width, self.view.bounds.size.height, 8, 4 * self.view.bounds.size.width, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedFirst); 
    CGContextAddArc(context, 320/2, 460/2, size, 0, 2*M_PI, 0); 
    CGContextClosePath(context); 
    CGContextClip(context); 
    CGContextDrawImage(context, self.view.bounds, _imageView.image.CGImage); 
    CGImageRef imageMasked = CGBitmapContextCreateImage(context); 
    CGContextRelease(context); 
    UIImage *newImage = [UIImage imageWithCGImage:imageMasked]; 
    CGImageRelease(imageMasked); 

    [_imageView setImage:newImage]; 
    UIGraphicsEndImageContext(); 
} 

此外,而不是設置6.3,它更容易使用2 * M_PI的角度。

+0

這一工程!謝謝你的幫助 :) – 2013-03-25 09:47:15