private void onTransform() {
    if (transform == null) return;
    if (transform.isCompleted()) return;

    // waiting for delay
    if (!transform.hasStarted()) return;

    // fire onStartTransform event
    if (!transform.isStartEventFired()) {
      transform.setStartEventFired(true);
      view.onStartTransform(transform);
    }

    if (transform.hasExpired()) {
      // if transform has been completed, finish the transformation
      if (transform.getRepeatCount() >= transform.getRepeat()) {
        if (transform.isAutoreverse() && !transform.isReversing()) {
          // no nothing
        } else {
          applyTransform();
          completeTransform();
          return;
        }
      }

      if (transform.isAutoreverse()) {
        transform.reverse();
      } else {
        transform.restart();
      }
    }

    applyTransform();
  }