More descriptive variable names.
Made variables const where possible.
Split arrow direction and origin calculation into separate methods.
Used CGRectMax* functions where possible.