Erzwinge, dass NSView programmgesteuert neu gezeichnet wird

Meine App hat zwei verschiedene Status, und jeder Status wird mit einem NSView dargestellt.

Es wird also immer nur eine Ansicht angezeigt. Das Problem besteht darin, dass die App beim Wechseln zwischen den Ansichten den neuen Status erst anzeigt, wenn ich die Fenstergröße manuell verändere.

Ich habe nach diesem Problem gesucht und habe mehr als eine Lösung gefunden, aber bei mir hat nichts funktioniert:

[myView setNeedsDisplay:YES];
[myView display];
[[myView.window contentView] setNeedsDisplay:YES];


[mySubView1 setHidden:YES]; || [mySubView1 removeFromSuperView];

Ich habe sogar myView als Outlet definiert und nichts funktioniert.

und das ist mein Code

if (appState == 1) {

    [self.splitView setFrameSize:CGSizeMake(self.splitView.frame.size.width, self.view.frame.size.height - 250)];

    [self.mySubView1 setHidden:NO];
    [self.mySubView2 setHidden:YES];

    [self.mySubView2 removeFromSuperview];
    [self.mySubView1 addSubview:self.inCallView];
}
else
{
    [self.splitView setFrameSize:CGSizeMake(self.splitView.frame.size.width, self.view.frame.size.height - 70)];

    [self.mySubView1 setHidden:YES];
    [self.mySubView2 setHidden:NO];

    [self.mySubView1 removeFromSuperview];
    [self.mySubView2 addSubview:self.chatHeaderView];
}
// I need to redraw here
[self.view setNeedsDisplay:YES];
[self.mySubView1 setNeedsDisplay:YES];
[self.mySubView2 setNeedsDisplay:YES];
// and nothing happened until I resize my window manually 

Antworten auf die Frage(2)

Ihre Antwort auf die Frage