放大UIScrollView后渲染内容

J W*_*J W 6 iphone

我环顾四周,看起来人们说你可以在放大之后重新渲染数据,因为你知道UIScrollView的比例因子.我还看过一些关于将你的图层设置为CATiledLayer并设置了levelsOfDetailBias和levelsOfDetail的帖子.

我所拥有的是UIScrollView,其中包含一个结果视图,它是UIView的子类:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        CATiledLayer *tiledLayer = (CATiledLayer *)self.layer;
        tiledLayer.levelsOfDetailBias = 3;
        tiledLayer.levelsOfDetail = 3;
        self.opaque = YES;
    }
    return self;
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

+ (Class)layerClass {
    return [CATiledLayer class];
}
Run Code Online (Sandbox Code Playgroud)

在我的类中,我有UIScrollView和ResultsView,我这样做:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return self.ResultsView;
}
Run Code Online (Sandbox Code Playgroud)

这是否足以使文本重新呈现(尖锐)?或者我需要实现一些东西

 - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
 }
Run Code Online (Sandbox Code Playgroud)

如果是这样,我不知道该怎么做.在我的带有UIScrollView和ResultsView的类中,在ResultsView(在XIB中)中,我只有几个UILabel和UIViews(UIViews用于视图的标题/页脚).所以我不知道如何从ResultsView重绘它们.虽然ResultsView在XIB中将UILabel和UIViews作为它的子代,但我不确定如何从ResultsView类重绘它们,以及我还需要做什么.

或者这是错误的方法?我只需要通过scrollViewDidEndZooming:delegate方法中的比例因子来调整UILabel和UIView的大小吗?TIA

afa*_*ham 19

我认为你采取了错误的做法.如果您的视图包含不执行任何自定义绘图的UILabel和UIViews,我不会使用CATiledLayer支持的视图.而是实现scrollViewDidEndZooming:withView:atScale:delegate方法并执行以下操作:

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {
    scale *= [[[self.scrollView window] screen] scale];
    [view setContentScaleFactor:scale];
    for (UIView *subview in view.subviews) {
        [subview setContentScaleFactor:scale];
    }
}
Run Code Online (Sandbox Code Playgroud)