Добавьте 2 UIImage в один UIImage - PullRequest
1 голос
/ 18 марта 2012

Я добавляю 2 изображения друг к другу и хотел бы знать, является ли это хорошим способом сделать это? Этот код работает и выглядит мощным.

Итак, мой вопрос на самом деле: это хорошо или есть лучший способ?

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

Ответы [ 4 ]

0 голосов
/ 18 марта 2012

Если вы хотите, чтобы одно изображение было нарисовано поверх другого, просто нарисуйте одно сзади, а затем - спереди, точно так же, как если бы вы использовали краску. Нет необходимости использовать режимы наложения.

[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
[topImage drawInRect:CGRectMake(*x,*y,topImage.size.width,topImage.size.height)];
0 голосов
/ 18 марта 2012

Основная идея верна. Нет лучшего способа сделать то, что вы хотите.

Недостатки:
1) Рассмотрим UIGraphicsBeginImageContextWithOptions метод. UIGraphicsBeginImageContext не подходит для сетчатки.
2) Не передавайте поплавки как указатели. Используйте x:(CGFloat)x y:(CGFloat)y instead

0 голосов
/ 18 марта 2012

Вам следует использовать начальную контекстную версию, UIGraphicsBeginImageContextWithOptions, которая позволяет указывать параметры для масштаба (и передавать 0 в качестве масштаба), если вы не теряете качество на дисплеях сетчатки.

0 голосов
/ 18 марта 2012

выглядит хорошо.Возможно, вам не нужны указатели CGFloat, но это тоже нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...