UIImageView is just fine for animating about the display (UIViews are lightweight wrappers around CALayers, which are just textures stored on the graphics card), but you do need to use the begin / commit animation block to get smooth animation. Using that, you can retrieve the current position of the view by accessing the backing layer of the UIView and obtaining its presentation layer. Dustin Bachrach has a post that describes just how to do this. Basically, the presentation layer is Core Animation's closest approximation to where the actual layer is at any given time, so its frame is the frame of your UIView at that instant.
I'm not sure that touch events will find their way to the view as it's moving across the screen, so if you need to have the UIImageView respond to touches you may need to replace it with a CALayer, insert it as a sublayer of your main UIView's layer, and call the hitTest method on the presentationLayer of that main layer. That should return the presentationLayer of your moving layer if it was clicked on, or the background layer if not.
Honestly, I wouldn't go with OpenGL unless you absolutely had to for performance reasons, because it is a lot harder to code for than what Core Animation provides you with UIViews and CALayers. I've been able to animate 50 moving translucent layers at 60 FPS (100 at 30 FPS) using just UIViews and CALayers.