A: 

You can try deriving the item you're animating from a custom UIView that overrides its drawRect method and sets anti-aliasing on for it then lets the parent draw into it. Something along the lines of:

- (void) drawRect:(CGRect)area
{
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSaveGState(context);
  CGContextSetShouldAntialias(context, true);
  CGContextSetAllowsAntialiasing(context, true);
  [super drawRect:area];
  // We have to turn it back off since it's not saved in graphic state.
  CGContextSetAllowsAntialiasing(context, false);
  CGContextRestoreGState(context);
}

On the other hand, it might be too late in the rendering pipeline by the time you get here, so you may have to end up rolling your own animation scheme that lets you have full control over pixel-positioning.

Ramin
I tried this. Seems that drawRect is not called while animating, as animation is done level below (I guess).
Anton
Yes, I thought it might be too late. You could try the same trick down at the CALayer level, but my guess is the only way around it is to roll your own sprite mover.
Ramin
+2  A: 

That's funny, but I found that UIImageView animate its content using aniti-aliasing, while edges of the view are not anti-aliased (hard). It seems to be because UIView itself should maintain the same bounds, while subpixel rendering might add to the bound a bit.

So, I ended up just putting an image with some transparent space around the picture, and it all went smooth.

Just don't let UIView cut its contents for you :)

Anton