14

我正在尝试在 iPhone 上编写动画,但没有取得太大成功,出现崩溃并且似乎没有任何效果。

我想做的事情看起来很简单,创建一个 UIImage,然后在其中绘制另一个 UIImage 的一部分,我对上下文和图层和东西有点困惑。

有人可以用示例代码解释如何(有效地)编写类似的东西吗?

4

3 回答 3

45

作为记录,这非常简单——你需要知道的一切都在下面的例子中:

+ (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;
}
于 2009-04-27T01:13:15.837 回答
9

我只想对 dpjanes 的上述答案添加评论,因为它是一个很好的答案,但在 iPhone 4(具有高分辨率视网膜显示屏)上会显得块状,因为“UIGraphicsGetImageFromCurrentImageContext()”不会以全分辨率呈现iPhone 4。

请改用“...WithOptions()”。但是由于 WithOptions 直到 iOS 4.0 才可用,您可以对其进行弱链接(在此处讨论),然后使用以下代码仅在支持的情况下使用雇用版本:

if (UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
}
else {
    UIGraphicsBeginImageContext();
}
于 2011-02-28T20:21:59.090 回答
4

这是一个将两个相同大小的图像合并为一个的示例。我不知道这是否是最好的,也不知道这种代码是否发布在其他地方。这是我的两分钱。

+ (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;
}

希望这可以帮助。

于 2013-11-11T03:28:17.757 回答