如何在缩放时使UIScrollView中的子视图刷新?

时间:2010-03-08 05:31:46

标签: iphone uiview uiscrollview zoom

我在uiscrollview中有一个子类UIView对象,它显示了一个pdf页面。我可以缩放那个页面。但是当我这样做时,内部视图会变焦并变得模糊。我明白内部视图会被刷新,我称之为setNeedsDisplay。但是没有发生任何变化,即使是现在也是如此。下面是子类uiview的drawRect代码。

- (void)drawRect:(CGRect)rect
{
if(document)//the pdf document object
{       
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSaveGState(ctx);
    CGContextTranslateCTM(ctx, 0.00, [self bounds].size.height);
    NSLog(@"%f",[self bounds].size.height);
    CGContextScaleCTM(ctx, 1.0, -1.0);
    CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, 
                                                         [self bounds], 0, true));
    CGContextDrawPDFPage(ctx, page);    
    CGContextRestoreGState(ctx);
}
}

2 个答案:

答案 0 :(得分:1)

查看ScrollViewSuite示例代码提供的CATiledLayer示例:

http://developer.apple.com/iphone/library/samplecode/ScrollViewSuite/Introduction/Intro.html

TapToZoom示例说明了一种在放大视图时让视图重绘其内容的方法。你需要以某种方式将视图的框架设置为大于屏幕,或者也可以使用变换 - 但是,我以前从未使用过变换。

答案 1 :(得分:1)

回答有点迟,正如所指出的那样,每次应用缩放时都必须设置子视图的帧。确保备份原始帧尺寸,以便在其上应用缩放系数。

滚动视图在缩放子视图时不会更改其子视图的框架,这就是子视图内容未刷新的原因。我发现使用变换和其他复杂的,所以我只是尝试了所提到的方法,它对我有用。