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++ズームインしません。何が起こっているのでしょうか。 ここに画像の説明を入力してください

4

1 に答える 1

2

元の画像を最初に設定しないことが問題だと思います。コードを少しテストして、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を使用する方が簡単です。

于 2013-03-25T09:13:50.377 に答える