2009-02-23 7 views
4

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):Anti-aliasing ne fonctionne pas lors du redimensionnement d'un UIWebView

alt text http://i44.tinypic.com/11t60hy.png

Notez à quel point le contenu a l'air sympa et aliasé!

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

utilisant la transformation suivante:

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

alt text http://i39.tinypic.com/10wnr6h.png

..la échelle est vraiment mauvaise qualité et il semble n'y avoir aucun anti-aliasing.

Est-ce que quelqu'un sait pourquoi cela se produit ou a une suggestion sur la façon dont il pourrait être réparé?

Merci! Nick.

Répondre

3

Je compris une solution! Prenez un instantané du webview, ajoutez-le à un UIImageView et redimensionnez ce qui a été installé!

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; 

Cela semble fonctionner correctement!

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 les suggestions ci-dessus! Nick.

+0

Une solution fantastique, Nick. Je me suis sorti d'une pince dans une pincée. – typeoneerror

0

Pourquoi ne pas simplement réduire la taille de la vue Web? 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]; 
+0

La modification de l'image de la vue Web ne fait que réduire la taille de la fenêtre dans le contenu. J'ai également essayé de changer le minificationFilter (qui est linéaire par défaut), et d'appliquer un CATransform à la couche, mais cela produit les mêmes résultats jaggy qu'il voit. –

+0

Oui - j'ai le même résultat. Peut-être que je peux convertir le webview en un bit-map et l'agrandir de cette façon ?! Un seul moyen de le savoir. Va poster le code si cela fonctionne. –

0

Dans votre UIViewController override

  • (void) placeViewItems: (UIInterfaceOrientation) interfaceOrientation

et faites votre frame.origin.x de UIWebView & valeurs entières de frame.origin.y. Voyez si c'est le résultat que vous recherchez.

Questions connexes