IFrameManager is a frame positioning addon. Addons register their frames within IFrameManager and it then allows the user to move the frames, snap to each other, and bind frames together permanently.
- Frames snap to each others' edges
- Anchors for permanent positioning
- Resolution/Scale independent
To go into the edit mode, that is to have all the movable overlays displayed, use the slash command /ifm. Once the black overlay frames are visible, you can move them with your mouse. If you move the edges of two frames close enough to each other, they will snap.
If you press and hold down the left control key, anchors will appear inside the overlay frames. To bind two frames to each other permanently, first click on an anchor inside the frame you want to bind to another frame, this anchor will turn blue. Then click on an anchor inside another frame you want to bind the first frame to. Voila, now the first frame will always be positioned relatively to the second frame. Now you can fine-tune the position of the first frame, moving it will not break its anchor.
If you move the mouse over a frame, the frame to which the mouseover frame is bound to will turn red, indicating that the mouseover frame is bound to the second (red) one. If no frame turns red, it means that the frame is bound to UIParent. Additionally, if you press and hold down the left control key, the anchors on which the frame is bound will turn yellow.
You can bind every frame to all edges, corners and the center of UIParent. All frames are bound to the center of UIParent by default.
To reset a binding of a frame, bind the frame to itself (press and hold down the left control key, and click twice on an anchor in the frame), the frame will then be bound to the center of UIParent. If you try to create a binding that would result in a circular dependency, IFrameManager will warn you and not allow to perform the binding.
AddOns that support IFrameManager
Perl Classic Unit Frames
Instructions for Developers
To register 'myAddOnFrame' within IFrameManager, use the following code: