Frequently Asked Question

Limit horizontal page change when a page is zoomed
最后更新 一年前

To limit horizontal scroll, we have to modify scrollViewDidScroll method (in PDFView class).

First, add DOUBLE_PAGE preprocessor macro: it will be 0 in single page mode and 1 in double page mode (it depends on m_view initialization in vopen method).

Now we have two cases: right to left or left to right mode.

Right to left:

scrollViewDidScroll method will become:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (m_cur_page + 1 < m_doc.pageCount && m_zoom > 1 && (self.contentOffset.x * m_scale + m_w > [m_view vGetPage:m_cur_page+1].GetX)){
#if DOUBLE_PAGE == 1
        if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]) || m_cur_page % 2 == 0)
#endif
            self.contentOffset = CGPointMake(([m_view vGetPage:m_cur_page+1].GetX / m_scale) - (m_w / m_scale), self.contentOffset.y);
    }
    if (m_cur_page > 0 && m_zoom > 1 && (self.contentOffset.x * m_scale < [m_view vGetPage:m_cur_page-1].GetX + [m_view vGetPage:m_cur_page-1].GetWidth)){
#if DOUBLE_PAGE == 1
        if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]) || m_cur_page % 2 != 0)
#endif
            self.contentOffset = CGPointMake(([m_view vGetPage:m_cur_page-1].GetX / m_scale) + ([m_view vGetPage:m_cur_page-1].GetWidth / m_scale), self.contentOffset.y);
    }   
    [m_view vMoveTo:self.contentOffset.x * m_scale :self.contentOffset.y * m_scale];
    [self refresh];
   CGRect rect = CGRectMake( self.contentOffset.x, self.contentOffset.y, m_w/m_scale, m_h/m_scale );
    m_child.frame = rect;
    m_child.backgroundColor = [[UIColor alloc] initWithRed:0 green:0 blue:0 alpha:0];
}
Left to right:

scrollViewDidScroll method will become:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (m_cur_page > 0 && m_zoom > 1 && (self.contentOffset.x * m_scale + m_w > [m_view vGetPage:m_cur_page-1].GetX)){
#if DOUBLE_PAGE == 1
        if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]) || m_cur_page % 2 == 0)
#endif
            self.contentOffset = CGPointMake(([m_view vGetPage:m_cur_page-1].GetX / m_scale) - (m_w / m_scale), self.contentOffset.y);
    }
    if (m_cur_page + 1 < m_doc.pageCount && m_zoom > 1 && (self.contentOffset.x * m_scale < [m_view vGetPage:m_cur_page+1].GetX + [m_view vGetPage:m_cur_page+1].GetWidth)){
#if DOUBLE_PAGE == 1
        if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]) || m_cur_page % 2 != 0)
#endif
            self.contentOffset = CGPointMake(([m_view vGetPage:m_cur_page+1].GetX / m_scale) + ([m_view vGetPage:m_cur_page+1].GetWidth / m_scale), self.contentOffset.y);
    }   
    [m_view vMoveTo:self.contentOffset.x * m_scale :self.contentOffset.y * m_scale];
    [self refresh];
   CGRect rect = CGRectMake( self.contentOffset.x, self.contentOffset.y, m_w/m_scale, m_h/m_scale );
    m_child.frame = rect;
    m_child.backgroundColor = [[UIColor alloc] initWithRed:0 green:0 blue:0 alpha:0];
}

正在加载……