Guides and Sample Code

Developer

macOS Human Interface Guidelines

iBooks

Pointers

macOS provides several standard pointers that provide well-defined feedback to users. It’s important to use these pointers correctly because users already know what they mean.

Use system-provided pointers according to their intended purpose. Users are accustomed to the meaning of the pointers they see in macOS. If you change the meaning of a system-provided pointer, users can’t predict the results of their actions. In addition to the arrow pointer, macOS provides the pointers listed in Table 73-1

Table 73-1Standard pointers in macOS

Pointer

Meaning

image: ../Art/contextual_menu_pointer_2x.png

A contextual menu is available for an item. Shown when the user presses the Control key while the pointer is over an object with a contextual menu.

image: ../Art/alias_pointer_2x.png

The drag destination will have an alias for the original object (the original object is not moved).

image: ../Art/poof_pointer_2x.png

The proxy object being dragged will go away, without deleting the original object, when the user releases the drag. Used only for proxy objects.

image: ../Art/copy_pointer_2x.png

The drag destination will have a copy of the original object (the original object is not moved).

image: ../Art/not_allowed_pointer_2x.png

An invalid drag destination.

image: ../Art/ibeam_pointer_2x.png

Selection and insertion of text is available.

image: ../Art/crosshair_pointer_2x.png

Precise rectangular selection is available.

image: ../Art/pointing_hand_pointer_2x.png

The content is a URL link.

image: ../Art/open_hand_pointer_2x.png

The item can be manipulated within its containing view.

image: ../Art/closed_hand_pointer_2x.png

Pushing, sliding, or adjusting an object within a containing view is occurring.

image: ../Art/resize_left_pointer_2x.png

The object can only be moved or resized to the left.

image: ../Art/resize_right_pointer_2x.png

The object can only be moved or resized to the right.

image: ../Art/resize_left_right_pointer_2x.png

The object can be moved or resized to the left or the right.

image: ../Art/resize_up_pointer_2x.png

The object can only be moved or resized upward.

image: ../Art/resize_down_pointer_2x.png

The object can only be moved or resized downward.

image: ../Art/resize_up_down_pointer_2x.png

The object can be moved or resized upward or downward.

The spinning wait cursor (shown below) is also standard, but it is displayed automatically by the window server when an app can't handle all of the events it receives. In general, if an app doesn’t respond for a few moments, the spinning wait cursor appears. If the app continues to be unresponsive, users often react by force-quitting it.

image: ../Art/cu_waitcursor.gif

Create a custom pointer cautiously. Before you design a custom pointer for your app (especially a custom version of a standard pointer), be sure the new pointer actually improves the usability of your app and doesn’t confuse users. If you’ve determined that you need a custom pointer, follow these guidelines as you design it:

  • Your design needs to make clear where the hot spot of the pointer is (briefly, a pointer’s hot spot is the part of the pointer that must be positioned over an onscreen object before clicking has an effect).

  • If your custom pointer is a version of a standard pointer, you also need to create custom versions of related pointers. For example, if you create a custom version of the arrow pointer you also need to create custom versions of the related arrow pointers, such as copy, move, alias, and poof.