Objective C drawRect в subview не вызывается после добавления в суперпредставление и setNeedsDisplay

У меня есть представление: DragView и представление: GameAreaView, и я объявляю GameAreaView в GameViewController.

Проблема в том, что мой пользовательский subview: DragView не рисовал, как ожидалось, в супер-просмотре ничего не нарисовано.

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: :( 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");

Но если я изменю initwithFrame на initwithImage

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

Подвид с изображением, отображаемым в GameAreaView, который не использовал drawRect.

Еще пробовал использовать setNeesDisplayInRect, ничего не меняется.

Почему drawRect в DragView.m не вызывается при использовании - (id) initwithFrame? Почему так происходит? А как исправить?


person iMonkey    schedule 05.03.2015    source источник
comment
где вы назвали вид перетаскивания?   -  person Teja Nandamuri    schedule 06.03.2015
comment
сделайте свойство своего вида перетаскивания и используйте [self.dragview setneedsdisplay];   -  person Teja Nandamuri    schedule 06.03.2015
comment
Я назвал это - (void) touchesEnded: (NSSet *) touch withEvent: (UIEvent *) event   -  person iMonkey    schedule 06.03.2015
comment
Я пробовал вас, но все равно drawrect в DragView не вызывается.   -  person iMonkey    schedule 06.03.2015
comment
Я хочу, чтобы после того, как пользователь коснулся GameAreaView, в этой точке создал DragView. Я не добавлял представление класса DragView в main.storyboard, потому что я думаю, что он создается динамически. Это проблема?   -  person iMonkey    schedule 06.03.2015
comment
в методе касаний вы вызываете представление контроллера игрового представления, но не представление перетаскивания   -  person Teja Nandamuri    schedule 06.03.2015
comment
вам нужно вызвать setNeedsDisplay в своем субпредставлении, а не в главном.   -  person Teja Nandamuri    schedule 06.03.2015


Ответы (1)


Вам нужно вызвать свое subview с помощью setNeedsDisplay, а не ваше основное представление

-(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];
}
person Teja Nandamuri    schedule 05.03.2015
comment
Спасибо за ответ , Я снова попробовал код, пока вы пишете, но все еще не вызвал drawRect в dragView. - person iMonkey; 06.03.2015