2012-03-15 2 views
2

Я использую плагин PhoneGap ExternalScreen, но я немного изменил его, чтобы поддерживать несколько разрешений. Я получил несколько советов от должности Мэтта Геммель на iPadVGAOutput (http://mattgemmell.com/2010/06/01/ipad-vga-output/) Вот то, что мой код выглядит следующим образом:iOS Второй экран

- (void) toggleResolution:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options 
{ 
    self.callbackID = [arguments pop]; 
    if ([[UIScreen screens] count] > 1){ 
     externalScreen = [[[UIScreen screens] objectAtIndex:1] retain]; 
     screenModes = [externalScreen.availableModes retain]; 
     UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"External Display Size" 
                message:@"Choose a size for the external display." 
                delegate:self 
                cancelButtonTitle:nil 
                otherButtonTitles:nil] autorelease]; 

     for (UIScreenMode *mode in screenModes){ 
      CGSize modeScreenSize = mode.size; 
      [alert addButtonWithTitle:[NSString stringWithFormat:@"%.0f x %.0f pixels", modeScreenSize.width, modeScreenSize.height]]; 
     } 
     [alert show]; 
    } else { 
     PluginResult* pluginResult = [PluginResult resultWithStatus:PGCommandStatus_ERROR messageAsString:WEBVIEW_UNAVAILABLE]; 
     [self writeJavascript: [pluginResult toErrorCallbackString:self.callbackID]]; 
    }  
} 



- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    UIScreenMode *desiredMode = [screenModes objectAtIndex:buttonIndex]; 
    externalScreen.currentMode = desiredMode; 
    externalWindow.screen = externalScreen;  
    [screenModes release]; 

    CGRect rect = CGRectZero; 
    rect.size = desiredMode.size; 
    externalWindow.frame = rect; 
    externalWindow.clipsToBounds = YES; 

    externalWindow.hidden = NO; 
    [externalWindow makeKeyAndVisible]; 

    PluginResult* pluginResult = [PluginResult resultWithStatus:PGCommandStatus_OK messageAsString:WEBVIEW_OK]; 
    [self writeJavascript: [pluginResult toSuccessCallbackString:self.callbackID]]; 
} 

Разрешение меняется просто отлично, но содержимое не ограничено внутри правильных размеров. Пример выглядит следующим образом:

Когда второй экран первоначально загружен (при 1920х1080), это выглядит следующим образом: http://cl.ly/F5IV

После изменения разрешения до 1280x720, это выглядит следующим образом: http://cl.ly/F41K

Я Я относительно новичок в Objective-C, но быстро его подбираю. Любые указатели на решение моей проблемы и/или улучшение кода в целом были бы замечательными. Благодаря!

Эндрю

EDIT: Я также хотел бы уточнить, я не устанавливать любую ширину/высоту на любом из представлений и/или CSS, что отображается вручную.

+0

Вы вынуждены использовать дополнительный экран? Можете ли вы разобраться с зеркалированием iOS? Я обнаружил, что зеркалирование обеспечивает гораздо лучший общий опыт по сравнению со вторым экраном. Это может не соответствовать вашим требованиям, но это стоит оценить. – Alan

+0

Алан, к сожалению, мы вынуждены использовать второй экран, потому что второй экран имеет соотношение 16: 9, а iPad - 4: 3. Мы будем в основном зеркалировать, но если вы не знаете способ избавиться от черных полос, не записывая второй экранный код вручную, мы застряли! :( – andrewpthorp

+0

Ahh ipad ... crap. Он отлично работает с iPhone4 в ландшафте. Я просто проверил наше приложение ipad на 30-дюймовом дисплее, и он имеет черные полосы. – Alan

ответ

1

Поскольку никто не нашел его, я начал копаться в Objective-C и решил его. Я должен был добавить следующее методы alertView:

webView.frame = rect; 
1

Как ваше решение не работает для меня, я кладу решение это здесь. Я получал черные полосы вокруг представления, хотя размер экранов был обнаружен правильно. Мне просто нужно было установить

[externScreen setOverscanCompensation: UIScreenOverscanCompensationInsetApplicationFrame]; 

и решетки исчезли.

Смежные вопросы