ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Desktop.Mapping Namespace / Animation Class / NumberOfFrames Property
Example Version

NumberOfFrames Property
Gets the total number of frames in the animation.
Syntax
public long NumberOfFrames {get;}
Example
Interpolate Camera
public Task<List<Camera>> GetInterpolatedCameras()
{
  //Return the collection representing the camera for each frame in animation.
  return QueuedTask.Run(() =>
  {
    var mapView = MapView.Active;
    if (mapView != null || mapView.Animation == null)
      return null;

    var animation = mapView.Map.Animation;

    var cameras = new List<Camera>();
    //We will use ticks here rather than milliseconds to get the highest precision possible.
    var ticksPerFrame = Convert.ToInt64(animation.Duration.Ticks / (animation.NumberOfFrames - 1));
    for (int i = 0; i < animation.NumberOfFrames; i++)
    {
      var time = TimeSpan.FromTicks(i * ticksPerFrame);
      //Because of rounding for ticks the last calculated time may be greating than the duration.
      if (time > animation.Duration)
        time = animation.Duration;
      cameras.Add(mapView.Animation.GetCameraAtTime(time));
    }
    return cameras;
  });
}
Interpolate Time
public Task<List<TimeRange>> GetInterpolatedMapTimes()
{
  //Return the collection representing the map time for each frame in animation.
  return QueuedTask.Run(() =>
  {
    var mapView = MapView.Active;
    if (mapView != null || mapView.Animation == null)
      return null;

    var animation = mapView.Map.Animation;

    var timeRanges = new List<TimeRange>();
    //We will use ticks here rather than milliseconds to get the highest precision possible.
    var ticksPerFrame = Convert.ToInt64(animation.Duration.Ticks / (animation.NumberOfFrames - 1));
    for (int i = 0; i < animation.NumberOfFrames; i++)
    {
      var time = TimeSpan.FromTicks(i * ticksPerFrame);
      //Because of rounding for ticks the last calculated time may be greating than the duration.
      if (time > animation.Duration)
        time = animation.Duration;
      timeRanges.Add(mapView.Animation.GetCurrentTimeAtTime(time));
    }
    return timeRanges;
  });
}
Interpolate Range
public Task<List<ArcGIS.Desktop.Mapping.Range>> GetInterpolatedMapRanges()
{
  //Return the collection representing the map time for each frame in animation.
  return QueuedTask.Run(() =>
  {
    var mapView = MapView.Active;
    if (mapView != null || mapView.Animation == null)
      return null;

    var animation = mapView.Map.Animation;

    var ranges = new List<ArcGIS.Desktop.Mapping.Range>();
    //We will use ticks here rather than milliseconds to get the highest precision possible.
    var ticksPerFrame = Convert.ToInt64(animation.Duration.Ticks / (animation.NumberOfFrames - 1));
    for (int i = 0; i < animation.NumberOfFrames; i++)
    {
      var time = TimeSpan.FromTicks(i * ticksPerFrame);
      //Because of rounding for ticks the last calculated time may be greeting than the duration.
      if (time > animation.Duration)
        time = animation.Duration;
      ranges.Add(mapView.Animation.GetCurrentRangeAtTime(time));
    }
    return ranges;
  });
}
Requirements

Target Platforms: Windows 11, Windows 10

ArcGIS Pro version: 3 or higher.
See Also