2014-02-03 2 views
2

Я хочу использовать трансляцию или адаптер HDMI для демонстрации приложений на iOS на большом экране.Отображение экрана iOS на втором дисплее

Проблема в том, что мое приложение работает только в портретном режиме, и большинство телевизоров имеют соотношение сторон 16: 9, и поэтому экран iPhone очень мал. Чтобы исправить это, я хочу повернуть телевизор и повернуть выход iPhone, чтобы иметь больший дисплей.

В iOS6 я использовал CADisplayLink и сделал снимок текущего экрана, а затем нарисовал его на внешнем экране. К сожалению, старый код больше не работал на iOS 7 и был вроде лагги. Есть ли хорошие рамки для этого?

Если у вас нет каких-либо предложений каркаса, возможно, вы поможете мне сделать это более эффективным?

Мой код в настоящее время выглядит следующим образом:

- (UIImage *) screenshot { 
    UIView* view = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES]; 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale); 

    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; 


    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 
} 

- (void)drawFrame 
{ 
    UIImageView* contentView = (UIImageView *)[self.secondWindow.rootViewController.view viewWithTag:[@"contentView" hash]]; 
    CGImageRef screenImg = [self screenshot].CGImage;//UIGetScreenImage(); 

    contentView.image = [UIImage imageWithCGImage:screenImg scale:1.0 orientation:UIImageOrientationLeft]; 
} 

ответ

0

Я изменил свою функцию скриншота так, чтобы заставить его работать достаточно быстро на iPhone 5s:

- (UIImage *) screenshot { 
    UIView* view = [[[[UIApplication sharedApplication] delegate] window] rootViewController].view; 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 2); 
    CGContextSetInterpolationQuality(UIGraphicsGetCurrentContext(), kCGInterpolationNone); 
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO]; 

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 
} 

Прежде чем я изменил первую строку I также на экране iPhone появился мерцающий экран. А также помогло изменение InterpolationQuality.

Если вы используете код на более раннем iPhone, вы также можете попробовать установить масштаб ImageContext (последний параметр функции UIGraphicsBeginImageContextWithOptions) на 1. Это отключит разрешение «сетчатки» на втором экране и сделает рендеринг намного быстрее!