مكافحة التعرج لا يعمل عند تغيير حجم UIWebView
-
06-09-2019 - |
سؤال
أرغب في إضافة عرض ويب إلى تطبيقي بنسبة 60٪ (مثل رأينا في Safari في استعراض عرض النوافذ الأخرى):
لاحظ كيف يبدو المحتوى لطيفا وتعيسا!
إذا حاولت إضافة نفس طريقة العرض الخاصة بي إلى تطبيقي:
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)];
.. مقياس هو حقا نوعية سيئة للغاية ويبدو أنه لا يوجد أي مكافحة التعرج.
هل يعرف أحد لماذا يحدث هذا أو يكون لديك اقتراح حول كيفية إصلاحه؟
شكرا! نيك.
المحلول
احسب حل!
قم بتناول لقطة من 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];
}
هتافات للحصول على اقتراحات أعلاه! نيك.
نصائح أخرى
لماذا لا تجعل فقط عرض الويب أصغر؟ يجب أن يجعل المحتوى بجودة عالية في الحجم الأصغر.
إذا كنت بحاجة إلى تحريك التغيير في الحجم، يمكنك ضبط minificationFilter
على طبقة عرض الويب للحصول على جودة معقولة:
[[webView layer] setMinificationFilter:kCAFilterLinear];
في تجاوز UiviewController الخاص بك
- (باطلة) phaceviewitems: (UIInterfaceorationation) interfaceorationation
وجعل الإطار UIWebView الخاص بك .origin.x & frame.origin.y القيم الصحيحة. معرفة ما إذا كانت هذه هي النتيجة التي تبحث عنها.