Използвам XWalkView, който е подклас на WKWebView, добавен като подизглед към изглед на контейнер програмно. Опитвам се да мащабирам страницата със съдържание на WKWebView, но не се мащабира за първи път. WKWebView увеличава мащаба на страницата със съдържание впоследствие, т.е. когато щипна мащаба или направя мащабиране с двойно докосване, той мащабира самия WKWebView или изгледа на контейнер (предполагам) и след това, като правя отново жестове за мащабиране, страницата със съдържание се мащабира (което се очаква).
Въпросът е как да накарате страницата със съдържание на WKWebView да се увеличава всеки път, когато се изпълнява жестът за мащабиране.
Съобразявам се с протокола UIScrollViewDelegate
в моя ViewController.h
, както е показано по-долу:
@interface ViewController : UIViewController<UIScrollViewDelegate, WKNavigationDelegate, WKUIDelegate>
Задавам делегата на себе си в viewDidLoad
както е показано по-долу:
xWalkView.scrollView.delegate = self;
Задаване на скали за мащабиране в viewDidLoad
както по-долу:
xWalkView.scrollView.minimumZoomScale = 1;
xWalkView.scrollView.maximumZoomScale = 6;
& внедряване на методите на протокола в ViewController.m
както по-долу:
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
if (shouldPageNotZoom) {
NSLog(@"viewForZoomingInScrollView YES");
return nil;
} else {
NSLog(@"viewForZoomingInScrollView NO");
return xWalkView.scrollView.subviews[0];
}
}
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
}
Използвам BOOL shouldPageNotZoom и го задавам ДА или НЕ въз основа на URL в зависимост от това дали се изисква мащабиране или не. На страници, където се изисква мащабиране, мога да видя дневника на блок else (NSLog(@"viewForZoomingInScrollView NO");
), който се отпечатва в областта на журнала, а на страници, където не се изисква мащабиране, мога да видя дневника на блок if (NSLog(@"viewForZoomingInScrollView YES");
). Което работи. Единственият проблем е, че страницата със съдържание не увеличава мащаба при първия жест за мащабиране, вместо WKWebView или изгледът на контейнер е увеличен (предполагам), но мащабира при следващите жестове за мащабиране.
След известно наблюдение установих, че подизглед при индекс 0 на scrollview се мащабира първия и следващите пъти (но страницата със съдържание мащабира следващите пъти не първия път), което се връща в viewForZoomingInScrollView
. Което трябва да е така и е. Направих това, като присвоих стойностите на маркера на всеки изглед и видях стойността на етикета, като регистрирах стойността на етикета в метода scrollViewDidEndZooming
в регистрационната област, както е показано по-долу:
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
if (shouldPageNotZoom) {
NSLog(@"viewForZoomingInScrollView YES");
return nil;
} else {
NSLog(@"viewForZoomingInScrollView NO");
xWalkView.scrollView.tag = 20;
xWalkView.tag = 15;
xWalkView.scrollView.subviews[0].tag = 10;
_containerView.tag = 5;
return xWalkView.scrollView.subviews[0];
}
}
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
NSLog(@"tag %li", (long) view.tag);
}
Предоставяне на дневника по-долу:
2017-11-28 17:21:36.610753+0530 MyApp[4614:241659] tag 10 //Getting this 1st time of zooming
2017-11-28 17:21:59.369461+0530 MyApp[4614:241659] tag 10 //Getting this at subsequent zooms
Не знам какво пропускам.
Моля, коментирайте, ако е необходимо някакво пояснение.