2016-04-24 13 views
0

Ich animiere ein ImageView mit CABasicAnimation. Ich verschiebe seine Ebene nach links, rechts, oben und unten und manchmal würde ich es größer skalieren und es dann auf seine Originalgröße usw. zurücksetzen.Ändern der Werte einer Ansicht und ihrer Ebenenwerte

Ich mache all dies zu seinem layer, also dachte ich, ich könnte müssen Bewegen Sie & skalieren Sie die echte Sache zusammen mit seiner layer auch, aber wenn ich es mit tap Geste getestet, um zu sehen, ob es wirklich nur blieb, wo es begann, war es nicht. Daher muss ich nicht mehr die view Frames ändern, soweit es mich betrifft.

Ändert die Änderung der Werte einer Ansichtsebene auch die Werte ihrer Ansicht?

Antwort

2

A UIView ist nicht mehr als eine Phantasie Wrapper für ein CALayer - UIResponder Veranstaltungen & Animation Annehmlichkeiten unter viele anderen Dingen zu bringen.

Viele UIView Eigenschaften sind eigentlich nur weitergeleitet Versionen der zugrunde liegenden CALayer Eigenschaften, rein für die Bequemlichkeit definiert.

  • Eine Ansicht frame & bounds Eigenschaften sollten immer die Schicht Äquivalente reflektieren.

  • transform ist etwas komplexer, als für die Ansicht vom Typ es ist CGAffineTransform - während auf der layer es CATransform3D ist. Wenn die Transformation der Ebene als CGAffineTransform dargestellt werden kann, können Sie in der Ansicht darauf zugreifen, nachdem Sie sie auf der Ebene festgelegt haben. Wenn es nicht dargestellt werden kann, ist sein Wert nicht definiert.

Deshalb ja, sind Sie zu Recht sagen Sie nicht die frame oder transform auf dem UIView aktualisieren müssen, wenn er auf seine CALayer ändern. Beachten Sie, dass diese Eigenschaften nicht die "In-Flight" -Werte der Animation wiedergeben. Sie müssen dafür auf die Ebene presentationLayer der Ebene zugreifen.

Beachten Sie auch, dass als @par & @jrturton erwähnen, wenn die Transformation eines Layers nicht die Identität Transformation ist, dann ist frame undefined und Sie sollten es daher nicht verwenden.

+0

Sobald Sie eine andere Transformation als die Identität in einer Ansicht oder ihrer Ebene festgelegt haben, sind die Eigenschaften "frame" und "bounds" nicht mehr gültig und sollten nicht verwendet werden. – par

+0

@par Yup, auf jeden Fall ein guter Punkt zu umfassen. Danke, dass du mich erinnert hast! – Hamish

+1

'Grenzen' sind nach Transformation noch gültig. Es ist nur "Frame", das nicht definiert ist. – jrturton