La vi cantando. ¿Por qué usa el tiempo pasado?

tienes razón. "Vi" realmente significa que lo vi, no el pasado, así que uso el tiempo pasado.

"Ella estaba cantando" significa que estaba cantando cuando lo "vio", por lo que el tiempo pasado continuo también se puede utilizar como complemento en la cláusula de objeto.

La vi cantando.

La vi cantando.