convertPoint fromView liefert nach Neustart falsche Werte

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • convertPoint fromView liefert nach Neustart falsche Werte

    Hallo zusammen,

    ich hab ein Problem mit der Methode convertPoint:fromView: .

    Meine App startet mit einem UIScrollView. Die ScrollView beinhaltet eine relativ große UIView mittels:

    Quellcode

    1. [_scrollView addSubView:_mainView];


    UIView (_mainView) und contentSize der ScrollView sind gleich. Beim Starten der App wird initial ein UIButton in die Mitte gesetzt, dessen Koordinaten sind dann auf dem iPad z.B x: 1820.00 y: 2525.00.
    Der Nutzer kann nun ähnlich einer MindMap Gruppen hinzufügen, dargestellt ebenfalls durch einen abgewandelten UIButton. Die Gruppen werden mit einer Linie (CAShapeLayer) jeweils mit ihrer "Übergruppe" verbunden.
    Jeder Button hat jeweils einen linken und einen rechten Verbindungspunkt. Diesen Verbindungspunkt konvertiert die UIView _mainView , um die Linie zu zeichnen.

    Jetzt hab ich folgendes Problem: Der Benutzer fügt der Hauptgruppe eine Untergruppe hinzu (welche ein Stück weiter rechts platziert wird). Die Linie wird vom rechten Verbindungspunkt der Hauptgruppe zum linken Verbindungspunkt der ersten Untergruppe gezeichnet. Berechnet werden die Punkte in der UIView _mainView wie folgt:

    Quellcode

    1. CGPoint startPoint = [self convertPoint:_mainGroup.rightConnector fromView:_mainGroup];
    2. CGPoint endPoint = [self convertPoint:subGroup.leftConnector fromView:subGroup];


    Der Nutzer fügt nun der ersten Untergruppe eine weitere Untergruppe hinzu. Die Punkte werden dementsprechend wie folgt berechnet:

    Quellcode

    1. CGPoint startPoint = [self convertPoint:fromSubGroup.rightConnector fromView:fromSubGroup];
    2. CGPoint endPoint = [self convertPoint:toSubGroup.leftConnector fromView:toSubGroup];


    Das funktioniert wunderbar - bis die App neugestartet wird. Beim Neustart werden die Gruppen und deren Position aus CoreData-Objekten neugeladen und der UIView _mainView wieder hinzugefügt.
    Die Linien werden dann von der Hauptgruppe zur ersten Untergruppe korrekt gezeichnet. Alle weiteren Linien werden dann allerdings falsch gezeichnet, da der startPoint scheinbar falsch konvertiert wird.
    Die Startpunkte liegen dann alle irgendwo rechts unten, die Endpunkte passen aber immer.

    Recht kompliziert zu erklären, ich hoffe, da blickt wer durch. Hat jemand ne Idee oder nen Anhaltspunkt, wo ich weiter suchen könnte?
  • Ich habs nun hinbekommen!

    Problem war folgendes:
    Beim Hinzufügen einer Untergruppe war die "Obergruppe" bereits ein SubView des UIView _mainView. Somit konnte die MainView die Koordinaten korrekt umrechnen.

    Beim Neustarten der App wurden die Gruppen, Untergruppen und Kontakte rekursiv hinzugefügt. Er hat also mit der jeweils letzten Gruppe / dem jeweils letzten Kontakte angefangen und wollte die Linie zur Obergruppe zeichnen, obwohl diese Obergruppe noch nicht als SubView der MainView hinzugefügt war. Oh mann, da muss man erst mal drauf kommen ... :-D.