【问题标题】:Anti-aliasing not working when resizing a UIWebView调整 UIWebView 大小时抗锯齿不起作用
【发布时间】:2009-02-23 15:39:57
【问题描述】:

我想以 60% 的比例将 Web 视图添加到我的应用程序(就像在 Safari 中浏览其他窗口视图中看到的那样):

注意内容看起来不错和别名!

如果我尝试将相同的 Web 视图添加到我的应用:

NSURL *url = [NSURL URLWithString:@"http://www.google.co.uk?q=hello"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)];
webView.delegate=self;
[webView loadRequest:request];  
[self.view addSubview:webView];

使用以下转换:

[webView setTransform:CGAffineTransformMakeScale(0.6, 0.6)];

..比例真的很差,而且似乎没有抗锯齿。

有谁知道为什么会发生这种情况或对如何解决它有建议?

谢谢! 尼克。

【问题讨论】:

    标签: iphone uiwebview antialiasing


    【解决方案1】:

    我想出了一个解决办法!

    拍摄 webview 的快照,将其添加到 UIImageView 并调整其大小!

    UIGraphicsBeginImageContext(webView.bounds.size);
    [webView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(webView.bounds.x, webView.bounds.y, webView.frame.size.width, webView.size.height)];
    imageView.image = viewImage;
    [self addSubview:imageView];
    [imageView release];
    
    webView.hidden = YES;
    

    似乎工作正常!

    需要注意的一点.. 如果您想在 WebView 加载后立即执行此操作,则需要将操作推迟一段时间(我选择了 10 秒!)

    像这样:

    -(void)deferLoading
    {
        webViewHasActuallyLoaded = YES;
        [self setNeedsLayout];
    }
    
    - (void)webViewDidFinishLoad:(UIWebView *)webView {
        [NSTimer scheduledTimerWithTimeInterval: 1.0/10.0 target:self selector:@selector(deferLoading) userInfo:nil repeats:NO];
    }
    

    为上述建议干杯! 尼克。

    【讨论】:

    • 很棒的解决方案,尼克。让我在紧要关头摆脱束缚。
    【解决方案2】:

    为什么不直接缩小网页视图?它应该以较小的尺寸呈现高质量的内容。

    如果您需要动画大小的变化,您可以在 web 视图的图层上设置minificationFilter 以获得合理的质量:

    [[webView layer] setMinificationFilter:kCAFilterLinear];
    

    【讨论】:

    • 更改网页视图的框架只会使窗口进入内容更小,它不会自动缩放它。我还尝试更改 minificationFilter(默认为线性),并将 CATransform 应用于图层,但这会产生与他看到的相同的锯齿状结果。
    • 是的 - 我有同样的结果。也许我可以将 webview 转换为位图并以这种方式缩放?!只有一种方法可以找出答案。如果可行,将发布代码。
    【解决方案3】:

    在你的 UIViewController 覆盖

    • (void)placeViewItems:(UIInterfaceOrientation)interfaceOrientation

    并使您的 UIWebView 的 frame.origin.x 和 frame.origin.y 整数值。 看看这是否是您正在寻找的结果。

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多