I was able to work out my gravity issues and it runs well on the iPhone. If anyone is interested here are the changes I've made.
At first I was lerping to the final position but it was giving me an undesired slowing down effect, so I switched to Sinerp.
void FixedUpdate()
{
if (Physics.Raycast(myTransform.position, Vector3.down, out hit, 1))
{
if (coinComponent.IsFalling)
{
tempLayer = hit.transform.gameObject.layer;
// 9 = Coin
// 8 = Lift
if (tempLayer == 8 || tempLayer == 9)
{
// It's stoping here.
// Determine if this is the right row, if so. sinerp the y pos if necessary
SetPrecisePosition(coinComponent.Row);
if (myTransform.position.y != preciseYPos)
{
// Lerp eases to the end. Lerp appears to add jerkiness near the end of its run.
// Switched to Sinerp
yPos2 = Mathfx.Sinerp(myTransform.position.y, preciseYPos, (FallSpeed * 3.5f) * Time.deltaTime);
tempVector.x = myTransform.position.x;
tempVector.y = yPos2;
myTransform.position = tempVector;
}
else
coinComponent.IsFalling = false;
}
}
}
else
{
// Hit nothing, falling
coinComponent.IsFalling = true;
coinComponent.Triggered = false;
myTransform.Translate(Vector3.down * FallSpeed * Time.deltaTime);
}
}
public static float Sinerp(float start, float end, float value)
{
return Mathf.Lerp(start, end, Mathf.Sin(value * Mathf.PI * 0.5f));
}