Rediseñar subviews después del zoom UIScrollView

Tengo un UIScrollView con una UIView hijo (CATiledLayer) – luego tengo un montón de vistas secundarias de esa vista (algunas de las cuales son UITextViews)

Después de hacer zoom todo está borroso.

He leído varios artículos sobre el tema y todos parecen indicar que debo manejar scrollViewDidEndZooming y luego 'hacer algunas transformaciones, ensuciar con el marco y ajustar la compensación de contenido'. Por favor, ¿alguien me puede sacar de mi miseria y explicar cómo está destinado a funcionar?

Gracias por adelantado…

Tuve un problema similar donde necesitaba hacer zoom con text. El mío no estaba usando CATiledLayer, así que esto puede o no funcionar para usted. Yo tampoco estaba usando ARC, así que si lo estás, tendrás que ajustar eso también.

La solución que se me ocurrió fue configurar los methods UIScrollViewDelegate de la siguiente manera:

// Return the view that you want to zoom. My UIView is named contentView. -(UIView*) viewForZoomingInScrollView:(UIScrollView*)scrollView { return self.contentView; } // Recursively find all views that need scaled to prevent blurry text -(NSArray*)findAllViewsToScale:(UIView*)parentView { NSMutableArray* views = [[[NSMutableArray alloc] init] autorelease]; for(id view in parentView.subviews) { // You will want to check for UITextView here. I only needed labels. if([view isKindOfClass:[UILabel class]]) { [views addObject:view]; } else if ([view respondsToSelector:@selector(subviews)]) { [views addObjectsFromArray:[self findAllViewsToScale:view]]; } } return views; } // Scale views when finished zooming - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale { CGFloat contentScale = scale * [UIScreen mainScreen].scale; // Handle retina NSArray* labels = [self findAllViewsToScale:self.contentView]; for(UIView* view in labels) { view.contentScaleFactor = contentScale; } } 

Golpeé el mismo problema y el código anterior no funcionó para mi caso. Luego seguí la documentation:

Si tiene la intención de apoyar el zoom en su vista de desplazamiento, la técnica más común es usar una sola subvista que abarque todo el contenido Tamaño de la vista de desplazamiento y luego agregar subvistas adicionales a esa vista. Esto le permite especificar la vista de contenido de 'colección' como la vista para ampliar, y todas sus subvenciones ampliarán de acuerdo con su estado.

La sección "Agregar subvenciones" de https://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/UIScrollView_pg/CreatingBasicScrollViews/CreatingBasicScrollViews.html

Simplemente creé una vista vacía y agregué mi CATiledLayer y todas las demás subvenciones a esa vista vacía. Luego agregó esa vista vacía como la única vista secundaria de la vista de desplazamiento. Y funcionó como un encanto. Algo a lo largo de estas líneas:

 - (void)viewDidLoad { _containerView = [[UIView alloc] init]; [_containerView addSubView:_yourTiledView]; for (UIView* subview in _yourSubviews) { [_containerView addSubView:subview]; } [_scrollView addSubView:_containerView]; } -(UIView*) viewForZoomingInScrollView:(UIScrollView*)scrollView { return _containerView; }