Подтвердить что ты не робот

Создайте UIImage из двух других UIImages на iPhone

Я пытаюсь написать анимацию на iPhone без особого успеха, получить сбой и ничего не работает.

То, что я хочу сделать, выглядит просто, создает UIImage и втягивает в него часть другого UIImage, я немного смутился с контекстом, слоями и т.д.

Может кто-нибудь объяснить, как написать что-то подобное (эффективно), с примером кода?

4b9b3361

Ответ 1

Для записи это оказывается довольно простым - все, что вам нужно знать, находится где-то в следующем примере:

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

Ответ 2

Я просто хочу добавить комментарий о ответе выше dpjanes, потому что это хороший ответ, но будет выглядеть блочным на iPhone 4 (с отображением сетчатки высокого разрешения), так как "UIGraphicsGetImageFromCurrentImageContext()" не отображается в полном объеме разрешение iPhone 4.

Вместо этого используйте "... WithOptions()". Но так как WithOptions недоступен до iOS 4.0, вы могли бы слабо связать его (обсуждаемый здесь), а затем использовать следующий код, чтобы использовать только версию hires, если он поддерживается:

if (UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
}
else {
    UIGraphicsBeginImageContext();
}

Ответ 3

Вот пример, чтобы объединить два изображения одного размера в один. Я не знаю, является ли это лучшим и не знает, размещен ли этот код где-то в другом месте. Вот мои два цента.

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

Надеюсь, что это поможет.