2016-09-28 3 views
0

私はepubリーダーアプリをベースとしたコードを使用しています。スワイプジェスチャーが動作するように変更しようとしています。私は単にページを前後に変更するための左右のジェスチャーと、epubの終了または開始を確認する境界が必要です。 Iveは、呼び出したJavaスクリプトの次のボタン機能と前のボタン機能に接続されているページとtheyreを切り替えるコードを特定しました。 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

私は間違ってa * /を間違って配置していますので、コードが乱雑に見えます。謝罪します –

答えて

0

解決策が見つかりました。私はとWKWebviewの両方のスワイプアクションを委任されたUISwipeGestureRecogniserを使用して、これらの処理を処理する関数を作成しました。このコードはこのフレームワークに固有のものですが、誰かに関連するかもしれません。私のコードは以下の通りです:

-(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スクリプトで処理しています。

関連する問題