Anti-aliasing ne fonctionne pas lors du redimensionnement d'un UIWebView
-
06-09-2019 - |
Question
Je voudrais ajouter une vue Web pour mon application à 60% de l'échelle (comme vu dans Safari dans la navigation d'autres fenêtres voir):
Remarquez comment le contenu est joli et Aliased!
Si je tente et ajouter la même vue Web à mon application:
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];
Utilisation de la transformation suivante:
[webView setTransform:CGAffineTransformMakeScale(0.6, 0.6)];
.. l'échelle est de qualité vraiment mauvais et il semble pas anti-aliasing.
Quelqu'un sait pourquoi cela se produit ou une suggestion sur la façon dont il pourrait être fixé?
Merci! Nick.
La solution
Je me suis dit une solution!
Prendre un instantané de la WebView, l'ajouter à un UIImageView et redimensionnez que insted!
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;
Il semble fonctionner très bien!
Un point à noter .. si vous voulez le faire dès que le WebView a chargé, vous devez reporter l'action par une certaine période (j'ai choisi un 10e de seconde!)
comme ceci:
-(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];
}
Vive suggestions abovee! Nick.
Autres conseils
Pourquoi ne pas simplement faire le point de vue web plus petit? Il devrait rendre le contenu de haute qualité à la plus petite taille.
Si vous avez besoin pour animer le changement de taille, vous pouvez régler la minificationFilter
sur la couche de vue Web pour obtenir la qualité raisonnable:
[[webView layer] setMinificationFilter:kCAFilterLinear];
Dans votre remplacement UIViewController
- (void) placeViewItems: (UIInterfaceOrientation) interfaceOrientation
Et faire vos valeurs entières de frame.origin.x de UIWebView & frame.origin.y. Voir si cela est le résultat que vous recherchez.