Сглаживание не работает при изменении размера UIWebView - PullRequest
4 голосов
/ 23 февраля 2009

Я хотел бы добавить веб-представление в мое приложение в масштабе 60% (как это видно в Safari при просмотре других окон):

alt text

Обратите внимание, как контент выглядит красиво и с псевдонимами!

Если я попытаюсь добавить в приложение тот же веб-вид:

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)];

alt text

.. масштаб действительно плохого качества, и, похоже, сглаживания нет.

Кто-нибудь знает, почему это происходит, или есть предложения о том, как это можно исправить?

Спасибо! Ник.

Ответы [ 3 ]

3 голосов
/ 26 февраля 2009

Я нашел решение!

Сделайте снимок веб-просмотра, добавьте его в 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];
}

Приветствия за предложения выше! Ник.

0 голосов
/ 22 июня 2011

В вашем UIViewController переопределить

  • (void) placeViewItems: (UIInterfaceOrientation) interfaceOrientation

И задайте целочисленные значения для вашего UIWebView frame.origin.x & frame.origin.y. Посмотрите, если это результат, который вы ищете.

0 голосов
/ 23 февраля 2009

Почему бы просто не уменьшить размер веб-страницы? Он должен отображать контент в высоком качестве при меньшем размере.

Если вам нужно анимировать изменение размера, вы можете установить minificationFilter на слое веб-представления, чтобы получить приемлемое качество:

[[webView layer] setMinificationFilter:kCAFilterLinear];
...