Ok, je pense que c'est possible J'ai mal compris la bonne façon d'implémenter un écran externe sur l'iPad et cela me cause beaucoup de maux de tête. Comme il s'agit d'un post long, ce que j'essaie de faire est de créer et d'envoyer une vue à un écran externe sur VGA, et de supprimer l'écran une fois que j'en ai fini avec elle. Je dois retenir les problèmes de comptage, donc je ne peux pas le faire fonctionner.Manipulation d'un écran externe sur l'iPad
J'ai un contrôleur de vue qui peut être appelé sur l'iPad à tout moment. Lorsque cette vue est chargée (il s'agit d'une télécommande, similaire à la présentation Keynote), je recherche un écran externe, puis crée une fenêtre et ajoute une vue au moniteur supplémentaire.
dans mon ipadViewController.h
< - le point de vue qui reste sur le
Je
@interface ipadViewController : UIViewController {
PresentationViewController *presentationView;
UIScreen *externalScreen;
UIWindow *externalWindow;
}
@property (nonatomic, retain) UIScreen *externalScreen;
@property (nonatomic, retain) UIWindow *externalWindow;
@property (nonatomic, retain) PresentationViewController *presentationView;
@end
(Il y a plus, mais c'est la substance de l'écran externe).
dans ipadViewController.m
:
@synthesize externalScreen;
@synthesize externalWindow;
@synthesize presentationView;
J'essaie donc de faire quelques petites choses lorsque la vue des charges:
Obtenez l'écran externe (si possible) Créer une presentationViewController
et l'ajouter à l'écran supplémentaire
- (void)viewDidLoad {
[super viewDidLoad];
[self getExternalScreen];
[self createPresentationAndSendToWindow];
}
pour obtenir l'écran, je ne l'getExternalScreen:
suivante:
if ([[UIScreen screens] count] > 1)
{
for (UIScreen *currentScreen in [UIScreen screens])
{
if (currentScreen != [UIScreen mainScreen])
self.externalScreen = [currentScreen autorelease];
}
}
et d'envoyer la vue de ce createPresentationAndSendToWindow:
:
if (self.presentationPath == nil) return;
PresentationViewController *viewController = [[PresentationViewController alloc] initWithNibName:@"CanvasPresentation" bundle:nil];
self.presentationView = viewController;
[viewController release];
if (self.externalWindow == nil)
{
CGRect externalBounds = [self.externalScreen bounds];
self.externalWindow = [[[UIWindow alloc] initWithFrame:externalBounds] autorelease];
[self.externalWindow addSubview:self.presentationView.view];
self.externalWindow.screen = self.externalScreen;
[self.externalWindow makeKeyAndVisible];
}
dans dealloc
J'essaie de nettoyage avec:
[presentationView release];
[externalScreen release];
//[externalWindow release]; <- that would crash
Problème J'ai est que lorsque je rejette la remoteViewController
(il est modal), après avoir libéré externalScreen
a un nombre de retenue = 1 et externalWindow a retenir count = 2.
Le plantage causé par externalWindow release
disparaît si je ne libère pas presentationView
(mais alors je fuis presentationView
.