我正在尝试在 iPhone 上编写动画,但没有取得太大成功,出现崩溃并且似乎没有任何效果。
我想做的事情看起来很简单,创建一个 UIImage,然后在其中绘制另一个 UIImage 的一部分,我对上下文和图层和东西有点困惑。
有人可以用示例代码解释如何(有效地)编写类似的东西吗?
作为记录,这非常简单——你需要知道的一切都在下面的例子中:
+ (UIImage*) addStarToThumb:(UIImage*)thumb
{
CGSize size = CGSizeMake(50, 50);
UIGraphicsBeginImageContext(size);
CGPoint thumbPoint = CGPointMake(0, 25 - thumb.size.height / 2);
[thumb drawAtPoint:thumbPoint];
UIImage* starred = [UIImage imageNamed:@"starred.png"];
CGPoint starredPoint = CGPointMake(0, 0);
[starred drawAtPoint:starredPoint];
UIImage* result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result;
}
我只想对 dpjanes 的上述答案添加评论,因为它是一个很好的答案,但在 iPhone 4(具有高分辨率视网膜显示屏)上会显得块状,因为“UIGraphicsGetImageFromCurrentImageContext()”不会以全分辨率呈现iPhone 4。
请改用“...WithOptions()”。但是由于 WithOptions 直到 iOS 4.0 才可用,您可以对其进行弱链接(在此处讨论),然后使用以下代码仅在支持的情况下使用雇用版本:
if (UIGraphicsBeginImageContextWithOptions != NULL) {
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
}
else {
UIGraphicsBeginImageContext();
}
这是一个将两个相同大小的图像合并为一个的示例。我不知道这是否是最好的,也不知道这种代码是否发布在其他地方。这是我的两分钱。
+ (UIImage *)mergeBackImage:(UIImage *)backImage withFrontImage:(UIImage *)frontImage
{
UIImage *newImage;
CGRect rect = CGRectMake(0, 0, backImage.size.width, backImage.size.height);
// Begin context
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
// draw images
[backImage drawInRect:rect];
[frontImage drawInRect:rect];
// grab context
newImage = UIGraphicsGetImageFromCurrentImageContext();
// end context
UIGraphicsEndImageContext();
return newImage;
}
希望这可以帮助。