我正在互相添加两个图像,想知道这是否是一个好方法?这段代码很有效,看起来很强大。
所以,我的问题真的是,这很好,还是有更好的方法?
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)];