Logré implementar zoomToRect usando algunas CA3DTransforms. Pegaré el código aquí en caso de que alguien esté interesado.
Tuve que mantener la referencia al marco original de scrollView para que esto funcione.
rect.origin.x = ((int)rect.origin.x) % (int)self.initialFrame.size.width;
float scale = MIN(self.initialFrame.size.width/rect.size.width,self.initialFrame.size.height/rect.size.height);
CGSize scaledFrameSize = CGSizeMake(self.initialFrame.size.width/scale, self.initialFrame.size.height/scale);
CGPoint middleOfFrame = CGPointMake(self.initialFrame.size.width/2 ,self.initialFrame.size.height/2);
CGPoint transformPoint = CGPointMake(rect.origin.x + scaledFrameSize.width/2,rect.origin.y + scaledFrameSize.height/2);
CGPoint offsetToCenter = CGPointMake((scaledFrameSize.width - rect.size.width)/2 * scale,(scaledFrameSize.height - rect.size.height)/ 2 * scale);
[UIView animateWithDuration:1 animations:^ {
self.layer.transform = CATransform3DConcat(CATransform3DConcat(CATransform3DConcat(CATransform3DMakeTranslation(middleOfFrame.x,middleOfFrame.y, 0),
CATransform3DMakeTranslation(-transformPoint.x, -transformPoint.y,0)),
CATransform3DMakeScale(scale, scale, 1)),
CATransform3DMakeTranslation(offsetToCenter.x, offsetToCenter.y, 0));
}];
Esto es brillante. – silviupop