UIImageView на слое UIView, неправильный вывод кадра - PullRequest
1 голос
/ 30 августа 2011

Я пытаюсь объединить 2 UIImageViews и сохранить их как 1. Самое верхнее изображение - это статическая «рамка», а нижнее изображение - вращаемое / масштабируемое.

Моя проблема заключается в том, что фотография должна быть сохранена как 640 x 960, однако фактический вид, на котором находятся 2 изображения, равен 320 x 480 (поэтому он правильно отображается на экране пользователя). Когда эти 2 изображения объединены, они сохраняются в представлении 640 x 960, однако сами два изображения объединяются в 320 x 480 (как видно на примере изображения ниже).

Вот код, который я сейчас использую, чтобы получить неверные результаты.

CGSize deviceSpec;
if ( IDIOM == IPAD ) { deviceSpec =CGSizeMake(768,1024); } else { deviceSpec =CGSizeMake(640,960); }
UIGraphicsBeginImageContext( deviceSpec );

    UIView * rendered = [[UIView alloc] init];
    [[rendered layer] setFrame:CGRectMake(0,0,deviceSpec.width,deviceSpec.height)];
    [[rendered layer] addSublayer:[self.view layer]];
    [[rendered layer] renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * draft = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

AssetsLibrary

Следует также упомянуть, что я сохраняю изображение, используя следующее:

ALAssetsLibrary * library = [[[ALAssetsLibrary alloc] init] autorelease];
[library writeImageToSavedPhotosAlbum: draft.CGImage orientation:ALAssetOrientationUp 
                      completionBlock: ^(NSURL *assetURL, NSError *error)  
 {
     if (error) {
         NSLog(@"ALAssetLibrary error - %@", error);
     } else {
         NSLog(@"Image saved: %@", assetURL);
     }
 }];

Выход

Обратите внимание, что вся белая область на самом деле 640 x 960, а 2 изображения 320 x 480.

enter image description here

Примечание: фактическое изображение здесь - 640x960 (вся область), где фактическое изображение (фотография) - 320x480, что является фактическим размером рамки исходного слоя.

1 Ответ

0 голосов
/ 30 августа 2011

Для поддержки разных шкал я использовал следующий код:

// If you specify a value of 0.0, the scale factor is set to the scale factor of the device’s main screen. 
UIGraphicsBeginImageContextWithOptions(compositeView.frame.size, compositeView.opaque, scale);
[compositeView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Итак, вам нужно заменить UIGraphicsBeginImageContext на UIGraphicsBeginImageContextWithOptions

...