2016-09-28 85 views
0

因此,我使用基於epub reader app的代碼,並試圖修改它以使滑動手勢工作。我只需要左手和右手手勢就可以向前或向後改變頁面,並且可以檢查epub的結束或開始。我確定了切換頁面的代碼,並將它們附加到調用java腳本的下一個和上一個按鈕函數中來執行此操作。加載java腳本和WKWebView的函數在函數- (void)loadView函數如下,我的嘗試是*UISwipeGestureRecognizer聲明已被註釋掉。將滑動手勢添加到epub ios應用程序

- (void)loadView { 
    self.view = [[UIView alloc] init]; 
    self.view.backgroundColor = [UIColor whiteColor]; 
// Notifications 

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 

[nc addObserver:self selector:@selector(onEPubSettingsDidChange:) 
    name:kSDKLauncherEPubSettingsDidChange object:nil]; 

// Create the web view. The choice of web view type is based on the existence of the WKWebView 
// class, but this could be decided some other way. 

// The "no optimize" RequireJS option means that the entire "readium-shared-js" folder must be copied in to the OSX app bundle's "scripts" folder! (including "node_modules" subfolder, which is populated when invoking the "npm run prepare" build command) There is therefore some significant filesystem/size overhead, but the benefits are significant too: no need for the WebView to fetch sourcemaps, and to attempt to un-mangle the obfuscated Javascript during debugging. 
// However, the recommended development-time pattern is to invoke "npm run build" in order to refresh the "build-output" folder, with the RJS_UGLY environment variable set to "false" or "no". This way, the RequireJS single/multiple bundle(s) will be in readable uncompressed form. 
//NSString* readerFileName = @"reader_RequireJS-no-optimize.html"; 

//NSString* readerFileName = @"reader_RequireJS-multiple-bundles.html"; 
NSString* readerFileName = @"reader_RequireJS-single-bundle.html"; 


if ([WKWebView class] != nil) { 
    WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; 
    config.allowsInlineMediaPlayback = YES; 
    config.mediaPlaybackRequiresUserAction = NO; 
    // Configure a "readium" message handler, which is used by host_app_feedback.js. 

    WKUserContentController *contentController = [[WKUserContentController alloc] init]; 
    [contentController addScriptMessageHandler:self name:@"readium"]; 
    config.userContentController = contentController; 

    WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config]; 
    m_webViewWK = webView; 
    webView.hidden = YES; 
    webView.scrollView.bounces = NO; 
    webView.allowsBackForwardNavigationGestures = YES; 
    [self.view addSubview:webView]; 

    // RDPackageResourceConnection looks at corePaths and corePrefixes in the following 
    // query string to determine what core resources it should provide responses for. Since 
    // WKWebView can't handle file URLs, the web server must provide these resources. 

    NSString *url = [NSString stringWithFormat: 
     @"%@%@?" 
     @"corePaths=readium-shared-js_all.js,readium-shared-js_all.js.map,epubReadingSystem.js,host_app_feedback.js,sdk.css&" 
     @"corePrefixes=readium-shared-js", 
     m_package.rootURL, 
     readerFileName]; 

    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]]; 

    //attempted swipe gestures, maybe create seperate function not sure if this is the best method 
    /*UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRightAction:)]; 
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight; 
    swipeRight.delegate = self.view; 
    [webView addGestureRecognizer:swipeRight]; 

    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftAction:)]; 
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; 
    swipeLeft.delegate = self.view; 
    [webView addGestureRecognizer:swipeLeft];/* 

} 
else { 
    UIWebView *webView = [[UIWebView alloc] init]; 
    m_webViewUI = webView; 
    webView.delegate = self; 
    webView.hidden = YES; 
    webView.scalesPageToFit = YES; 
    webView.scrollView.bounces = NO; 
    webView.allowsInlineMediaPlayback = YES; 
    webView.mediaPlaybackRequiresUserAction = NO; 
    [self.view addSubview:webView]; 

    NSURL *url = [[NSBundle mainBundle] URLForResource:readerFileName withExtension:nil]; 
    [webView loadRequest:[NSURLRequest requestWithURL:url]]; 

    //attempted swipe gestures, maybe create seperate function 
    /*UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRightAction:)]; 
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight; 
    //swipeRight.delegate = self; 
    [webView addGestureRecognizer:swipeRight]; 

    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftAction:)]; 
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; 
    //swipeLeft.delegate = self; 
    [webView addGestureRecognizer:swipeLeft];*/ 

} 
} 

任何幫助將非常感激,我已經請求原始開發人員的幫助,但他們還沒有迴應。我想我會得到別人的意見。

謝謝

+0

哎呀,我無意中錯位了* /所以我的代碼看起來搞砸了。我道歉 –

回答

0

找到了解決辦法。我使用UISwipeGestureRecogniser委託在UIWebviewWKWebview上的滑動操作,然後我創建了處理這些操作的函數。儘管此代碼特定於此框架,但它可能與某人有關。我的代碼如下:

-(void) viewDidLoad{ 
    [super viewDidLoad]; 
    UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRightAction:)]; 
    //swipeRight.direction = UISwipeGestureRecognizerDirectionRight; 
    [swipeRight setDirection:UISwipeGestureRecognizerDirectionRight]; 
    //swipeRight.delegate = self; 
    [m_webViewUI addGestureRecognizer:swipeRight]; 
    [m_webViewWK addGestureRecognizer:swipeRight]; 



UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftAction:)]; 
    //swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; 
    [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft]; 
    //swipeLeft.delegate = self; 
    [m_webViewUI addGestureRecognizer:swipeLeft]; 
    [m_webViewWK addGestureRecognizer:swipeLeft];} 

我然後映射向後和向前的手勢翻頁:

-(void)swipeLeftAction:(UISwipeGestureRecognizer *) swipe{ 
[self executeJavaScript:@"ReadiumSDK.reader.openPageNext()" completionHandler:nil]; 
NSLog(@"%s","Swipe Left");} 

-(void)swipeRightAction:(UISwipeGestureRecognizer *) swipe{ 
    [self executeJavaScript:@"ReadiumSDK.reader.openPagePrev()" completionHandler:nil]; 
    NSLog(@"%s","Swipe Right"); 

邊界檢查是由框架的Java腳本處理。