ViewController Probleme unter iOS (Objective-C)

Elandril

Mitglied
Hallo,

zunächst einmal: ich tu mir grad etwas schwer das richtige Forum für mein Anliegen zu finden, weil es ein wenig querfeldein ist.

Jedenfalls zur Situationsbeschreibung

für einen Prof soll ich ein Computergrafik & Bildverarbeitungspraktikum aufs iPhone portieren. Das geht soweit auch recht gut und c++ Code für OpenGL läuft wunderbar. Allerdings nähert sich mein Wissen über Objective-C der 0 an (und zwar von Unten) weshalb ich jetzt beim Basteln des UserInterface auf ziemliche Probleme stoße.

Zum Aufbau:

Ich habe eine iOS-Anwendung mit GL ES 2.0 erstellt, die einen ViewController enthält, der sich um das Rendering usw kümmert.

In diesem ViewController habe ich dann die Methode:

Code:
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    
    UIView *view = [touch view];
    CGPoint touchPoint = [[touches anyObject] locationInView:view];
    
    cout << "Touch X: " << touchPoint.x << " Touch Y: " << touchPoint.y << endl;

    // Resolution mit einbeziehen
    if(touchPoint.x <= 60 && touchPoint.y <= 60)
    {
        textureSelection--;
        cout << "Texture--" << endl;
    }
    
    if(touchPoint.x >= (self.view.bounds.size.width - 60) && touchPoint.y <= 60)
    {
        textureSelection++;
        cout << "Texture++" << endl;
    }
    
    if(touchPoint.y >= (self.view.bounds.size.height - 60))
    {
        ControlView *controller = [[ControlView alloc] init];
        
        [controller giveGLInstance:self];

        [self presentModalViewController:controller animated:YES];
        
        cout << "Controll View" << endl;
    }
    
    mclamp(textureSelection, MAX_TEXTURES, 0);
}

eingebaut.

Damit kann man eben am unteren Bildschirmrand eine View öffnen (ControlView), die eben Parameter wie ausgewählten Shader, Anzahl an durchhläufen etc. steuern soll. Die giveGLInstance-Methode ist eine eigene Methode, die eine Referenz auf den aktuellen ViewController, der für das GL-Rendering verantwortlich ist, zu übergeben.

Mit dem [self presentModalViewController:controller animated:YES]; Aufruf wird diese View dann auch geöffnet und ich sehe zunächst einmal nur eine NavigationBar mit einem UIBarButtonItem, über den ich dann zur Rendering-View zurückkehren will

Code dafür:
Code:
-(void)menuReturnButton
{
    std::cout << "Button: Zurück!" << std::endl;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    [back setAction:@selector(menuReturnButton)];
}


wenn ich allerdings dann in die menuReturnButton-Methode

Code:
-(void)menuReturnButton
{
    std::cout << "Button: Zurück!" << std::endl;
    [self presentModalViewController:glInstance animated:YES];
}

aufrufe, knallt die Application lediglich mit dem Hinweis:

Button: Zurück!
warning: Unable to restore previously selected frame.
(gdb)


Nun also meine Frage: Weiß jemand, woran das liegt und wie ich das beheben kann, bzw. wie ich das Problem sauberer lösen könnte?

Danke schon mal!
 
Thema erledigt.

muss

Code:
-(void)menuReturnButton
{    
    [self dismissModalViewControllerAnimated:YES];
    
    std::cout << "Button: Zurück!" << std::endl;
}

sein.
 
Zurück