2015-03-05 1 views
0

J'ai vue: DragView et une vue: GameAreaView, et déclarer GameAreaView dans GameViewController.Objectif C drawRect en sous-vue pas appelé à ajouter après super vue et setNeedsDisplay

Le problème est que ma sous-vue personnalisée: DragView n'a pas dessiné comme prévu, il n'y a rien dessiné en super vue.

GameViewController.m

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
...... get touch point , but haven't use it 

// Initialise a dragView when user touches in gameAreaView 
DragView *agentDragger = [[DragView alloc] initWithFrame:CGRectMake(10, 10,  
50, 50)]; 

[self.gameAreaView addSubview:agentDragger]; 

[[self gameAreaView] setNeedsDisplay]; 
} 

GameAreaView.m

-(void)drawRect:(CGRect)rect { 
    NSLog(@"I am GameAreaView Rect!!"); 
} 

DragView.m - (id) initWithFrame: :(cadre CGRect)

-(id) initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     NSLog(@"1.Hi i am in if "); 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect { 

    [MyStyleKitAgent drawAgentNodeWithFrame:_frame 
         longPressed:_isLongPressed 
           vname:_name 
          pressed:_isPressed]; 


// Test for draw lines 
NSLog(@"I am in DragView"); 

Mais si je change initWithFrame à initwithImage

-(id) initWithImage:(UIImage *) anImage 
{ 
    self = [super initWithImage:anImage]; 
    return self; 
} 

Le sous-vue avec l'image affichée dans GameAreaView, qui n'a pas utilisé drawRect. J'ai également essayé setNeesDisplayInRect, rien ne change. Pourquoi drawRect dans DragView.m n'a pas été appelé lors de l'utilisation de - (id) initwithFrame? Pourquoi cela arrive-t-il? Et comment y remédier?

+0

où avez-vous appelé la vue glisser? –

+0

faire une propriété de votre vue glisser et utiliser [self.dragview setneedsdisplay]; –

+0

Je l'ai appelé dans - (void) touchesEnded: (NSSet *) touche avecEvent: (UIEvent *) événement – iMonkey

Répondre

0

Vous devez appeler votre sous-vue par setNeedsDisplay pas votre vue principale

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    //...... get touch point , but haven't use it 

// Initialise a dragView when user touches in gameAreaView 
DragView *agentDragger = [[DragView alloc] initWithFrame:CGRectMake(10, 10,  
    50, 50)]; 

[self.gameAreaView addSubview:agentDragger]; 

    [agentDragger setNeedsDisplay]; 
} 
+0

Merci pour votre réponse, j'ai essayé à nouveau le code que vous écrivez, mais toujours pas appelé drawRect dans dragView. – iMonkey