Your code is confused.
You first need to turn on layer backing of your view.
Then you either want to use an animation proxy to change the property you want to animate, OR you want to use a CAAnimation to animate it's layer, not both.
For simply animating it's position, using an animation proxy is simpler.
I mostly write for iOS these days, so I've barely used animation proxies.
I believe you should be able to just get rid of your CAAnimation and your code that sets the frame on the animation proxy should work. You need to set the flag to make your view layer-backed in order for this to work however.
add this code after adding your view to its superview:
imageView.wantsLayer = YES;