Yes, there are guidelines. The iOS Human Interface Guidelines say:
Use a modal view when you need to
offer the ability to accomplish a
self-contained task related to your
application’s primary function. A
modal view is especially appropriate
for a multistep subtask that requires
UI elements that don’t belong in the
main application user interface all
the time.
They also say to "Make Modal Tasks Occasional and Simple":
When possible, minimize the number of
times people must be in a modal
environment to perform a task or
supply a response. iOS applications
should allow people to interact with
them in nonlinear ways. Modality
prevents this freedom by interrupting
people’s workflow and forcing them to
choose a particular path.
Modality is most appropriate when:
It’s critical to get the user’s
attention. A task must be completed
(or explicitly abandoned) to avoid
leaving the user’s data in an
ambiguous state. People appreciate
being able to accomplish a
self-contained subtask in a modal
view, because the context shift is
clear and temporary. But if the
subtask is too complex, people can
lose sight of the main task they
suspended when they entered the modal
view. This risk increases when the
modal view is full screen and when it
includes multiple subordinate views or
states.
Keep modal tasks fairly short and
narrowly focused. You don’t want your
users to experience a modal view as a
mini application within your
application. Be especially wary of
creating a modal task that involves a
hierarchy of views, because people can
get lost and forget how to retrace
their steps. If a modal task must
contain subtasks in separate views, be
sure to give users a single, clear
path through the hierarchy, and avoid
circularities.
Always provide an obvious and safe way
to exit a modal task. People should
always be able to predict the fate of
their work when they dismiss a modal
view.
If the task requires a hierarchy of
modal views, make sure your users
understand what happens if they tap a
Done button in a view that’s below the
top level. Examine the task to decide
whether a Done button in a lower-level
view should finish only that view’s
part of the task or the entire task.
When possible, avoid adding Done
buttons to subordinate views, because
of this potential for confusion.