Создайте UIImage из двух других UIImages на iPhone
Я пытаюсь написать анимацию на iPhone без особого успеха, получить сбой и ничего не работает.
То, что я хочу сделать, выглядит просто, создает UIImage и втягивает в него часть другого UIImage, я немного смутился с контекстом, слоями и т.д.
Может кто-нибудь объяснить, как написать что-то подобное (эффективно), с примером кода?
Ответы
Ответ 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;
}
Надеюсь, что это поможет.