Je ne peux pas comprendre ce que le problème est ici. J'ai une très simple UIViewController avec une méthode de la vue ViewDidDidLoad très simple: et mon gameview est initialisé comme suit: p> et il est simplement A une nouvelle méthode Drawrect: P> - (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
NSLog(@"drawing");
}
4 Réponses :
Avez-vous essayé de spécifier le cadre dans l'initialisation de la vue? Parce que vous créez une uIView personnalisée, vous devez spécifier le cadre pour la vue avant que la méthode de dessin soit appelée.
Essayez de changer votre viewDidLoad sur les éléments suivants: P>
NSLog(@"making game view");
GameView *v = [[GameView alloc] initWithFrame:CGRectMake(0,0,320,460)];
if (v == nil)
NSLog(@"was not allocated and/or initialized");
[self.view addSubview:v];
if (v.superview == nil)
NSLog(@"was not added to view");
[super viewDidLoad];
Comment puis-je remplacer la méthode init pour faire cela? Quelle est la méthode appropriée en direction de cela?
J'ai essayé de le faire comme ceci: Gameview * v = [[Gameview ALLOC] InitwithFrame: CGrectument (0,0,320,460)]; mais ça n'a toujours pas fonctionné
Avez-vous fait des autres personnalisations?
Merci pour ce @eytan. Quelque chose arrive lorsque vous appelez [super initwithframe: ...] code> qui active drawrect code>. Je remplace une déclaration init et je fixais le cadre là-bas. Si j'ai changé le self = [Super init] code> sur auto = [Super InitwithPrame: CGrectument (1,1,1,1)] code>, cela fonctionnerait. Maintenant, je viens de remplacer initwithframe pour le rendre plus transparent.
Vérifiez si votre vue est affichée. Si une vue n'est pas actuellement à l'écran, Et autant que je sache, vous n'avez pas besoin d'écrire Notez que même si Drawrect code> ne sera pas appelé même si vous ajoutez la vue à son superview. Une possibilité est que votre vue soit bloquée par la même autre vue. P>
[super drawrect] code>; p>
ViewDidLoad code> est appelé sur un contrôleur d'affichage, il n'indique pas nécessairement que la vue du contrôleur d'affichage est affichée à l'écran. Exemple: supposez qu'un contrôleur d'affichage A a un ivar où un contrôleur de vue B est stocké et afficher la vue de contrôleur A est actuellement affiché. Supposons également que B est allocé et inité. Maintenant, si une méthode d'une vision de B de B est accessible ViewDidLoad code> dans B sera appelée en conséquence, que ce soit affiché. p>
Si vous utilisez une LIB ou un fichier Cocoatsouch, vous devrez peut-être remplacer la méthode InitwithCoder au lieu de la vue ViewDidLoad.
objectif-c: p>
J'ai eu une opinion qui était décrénale, que je chargerais à l'écran, puis redessinez. Toutefois, tout en nettoyant les contraintes de mise en page automatique en Xcode, elle a décidé que ma vue offcrine devrait avoir une image (0,0,0,0) (x, y, w, h). Et avec une taille (0,0), la vue ne chargerait jamais. P>
Assurez-vous que votre nsview a une taille de cadre non zéro ou que le drawrect ne sera pas appelé. P>
Ajouter
[Self.View BringSubviewToFront: v]; code> auViewDidLoad code> et voyez si cela fait une différence.