将2个UIImage添加到一个UIImage中



我正在互相添加两个图像,想知道这是否是一个好方法?这段代码很有效,看起来很强大。

所以,我的问题真的是,这很好,还是有更好的方法?

PS:由设计者编写的警告代码。

调用函数:

- (IBAction) {
    UIImage *MyFirstImage = UIImage imageNamed: @"Image.png"];
    UIImage *MyTopImage = UIImage imageNamed: @"Image2.png"];
    CGFloat yFloat = 50;
    CGFloat xFloat = 50;
    UIImage  *newImage =   [self placeImageOnImage:MyFirstImage imageOver:MyTopImage x:&xFloat y:&yFloat];
}

功能:

- (UIImage*) placeImageOnImage:(UIImage *)image topImage:(UIImage *)topImage x:(CGFloat *)x y:(CGFloat *)y {    
    // if you want the image to be added next to the image make this CGSize bigger.  
    CGSize newSize = CGSizeMake(image.size.width,image.size.height); 
    UIGraphicsBeginImageContext( newSize );
    [topImage drawInRect:CGRectMake(*x,*y,topImage.size.width,topImage.size.height)];
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height) blendMode:kCGBlendModeDestinationOver alpha:1];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

看起来不错。也许你并不真的需要CGFloat指针,但这也很好。

大意是正确的。没有比这更好的方法来做你想做的事了。

Minuses:
1) 考虑UIGraphicsBeginImageContextWithOptions方法。UIGraphicsBeginImageContext对视网膜不好
2) 不要将浮点值作为指针传递。使用x:(CGFloat)x y:(CGFloat)y instead

您应该使用开始上下文版本UIGraphicsBeginImageContextWithOptions,它允许您指定缩放选项(并将0作为缩放),这样您就不会在视网膜显示上失去任何质量。

如果你想在另一个图像上绘制一个图像,只需先绘制后面的图像,然后再绘制前面的图像,就像你在使用绘画一样。不需要使用混合模式。

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
[topImage drawInRect:CGRectMake(*x,*y,topImage.size.width,topImage.size.height)];

最新更新