Ich habe eine iPad-App, die ziehbare UIViews in einem größeren übergeordneten UIView enthalten (die ich die Hauptansicht nennen). Eine der Funktionen der App ist die Möglichkeit, zwischen zwei Ansichten zu ziehen, um sie zu verbinden. Beim Ziehen rendere ich eine Linie in einem CALayer, der in der Ansicht verankert ist, auf die Sie gezogen haben, und endet auf dem Finger des Benutzers. Wenn der Benutzer das Ziehen über einer anderen Ansicht beendet, werden sie angefügt.CALayer Performance-Problem: Animieren einer Linie zwischen zwei UIViews verankert
Wenn Ansichten angehängt sind, wird permanent eine Linie zwischen ihnen gezeichnet.
In der aktuellen Implementierung sind also zwei CALayers Sublayer der Hauptansicht. Einer ist der LinkLayer, der die bestehenden Links zwischen den Sichten rendert. der andere ist der LinkLineLayer, der die Zeile, die der Benutzer gerade zeichnet, mit einer Ziehaktion rendert.
Wenn das Ziehen auftritt und ein neues Ziehereignis eintritt, rufe ich [linkLineLayer setNeedsDisplay] auf. Wenn ein Benutzer eine Ansicht zieht, rufe ich [linkLayer setNeedsDisplay] auf.
die Leistung ist schrecklich auf dem tatsächlichen Gerät, so dass ich rate, dass dies nicht der Weg zu gehen ist. Welche Alternativen gibt es, um Linien zwischen Ansichten (oder Punkten in einer Ansicht) so zu zeichnen, dass ich sie häufig aktualisieren kann, wenn ich eine Ansicht ziehe oder eine Linie zwischen Ansichten ziehe, ohne die Bildrate zu zerstören und die Geräte-CPU zu hämmern?
aktualisieren So letzte i Nacht in ging und zwei Korrekturen vorgenommen, die einen großen Unterschied gemacht: 1.) alle Verbindungslinien Schicht ihre eigenen sind. Wenn eine Ansicht umhergezogen wird, aktualisiere ich nur die Verbindungslinien, die mit dieser spezifischen Ansicht verknüpft sind.
2.) die "Ziehlinie" wurde zu einer Ebene, deren Größe auf die Größe der gerenderten Linie beschränkt ist. Ich passe die Ebenenbegrenzungen an, während sich der Finger des Benutzers bewegt.
das hat super funktioniert, danke! – aschepis