O'Reilly logo

iOS 7 Programming Cookbook by Vandad Nahavandipoor

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

2.4. Attaching Multiple Dynamic Items to Each Other

Problem

You want to attach dynamic items, such as views, so that the movements in one will cascade to the second view automatically. Alternatively, you want to attach a dynamic item to an anchor point so that when that point moves (because your app or the user moves it), the item will automatically move with it.

Solution

Instantiate an attachment behavior of type UIAttachmentBehavior, using the initWithItem:point:attachedToAnchor: instance method of this class. Add this behavior to an animator (see Recipe 2.0), which will take care of the dynamics and the physics of movement.

Discussion

The attachment behavior is at first a bit difficult to understand. In simple terms, you can set an anchor and then have a point follow that anchor. But I’d like to give you more details.

Let’s say that you have a large photo on a flat desk. Now if you place your index finger on the upper-right corner of the photo and start moving it around, the picture may rotate around your fingertip, and may not go exactly straight toward the direction you are moving it to. But if you move your finger to the center of the photo and move it around, the photo will not rotate around your fingertip. You can create the same real-life behavior using the attachment behavior in UIKit.

In this recipe, we want to create an effect similar to that explained in Figure 2-3.

In Figure 2-3 you can see that we have three views on our screen. The main view is in the center and includes ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required