欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS下PDF文件的瀏覽和涂鴉效果的簡(jiǎn)單實(shí)現(xiàn)

 更新時(shí)間:2015年10月28日 09:47:07   作者:念茜  
這篇文章主要介紹了iOS下PDF文件的瀏覽和涂鴉效果的簡(jiǎn)單實(shí)現(xiàn),代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下

瀏覽PDF的效果
方法一:利用webview

復(fù)制代碼 代碼如下:

-(void)loadDocument:(NSString *)documentName inView:(UIWebView *)webView 

    NSString *path = [[NSBundle mainBundle] pathForResource:documentName ofType:nil]; 
    NSURL *url = [NSURL fileURLWithPath:path]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [webView loadRequest:request]; 


利:1.實(shí)現(xiàn)簡(jiǎn)單
        2.還是實(shí)現(xiàn)簡(jiǎn)單
弊:1.僅能瀏覽,拿不到任何回調(diào),safari不會(huì)鳥(niǎo)任何人。
        2.固定豎版拖動(dòng),想實(shí)現(xiàn)翻頁(yè)動(dòng)效果就扒瞎

2015102894335125.png (424×555)

下面的方法可以解決webview 顯示pdf的弊,相對(duì)的,要付出一些汗水作為代價(jià)了。

方法二:利用CGContextDrawPDFPage

復(fù)制代碼 代碼如下:

CGPDFDocumentRef GetPDFDocumentRef(NSString *filename) 

    CFStringRef path; 
    CFURLRef url; 
    CGPDFDocumentRef document; 
    size_t count; 
     
    path = CFStringCreateWithCString (NULL, [filename UTF8String], kCFStringEncodingUTF8); 
    url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, 0); 
     
    CFRelease (path); 
    document = CGPDFDocumentCreateWithURL (url); 
    CFRelease(url); 
    count = CGPDFDocumentGetNumberOfPages (document); 
    if (count == 0) { 
        printf("[%s] needs at least one page!\n", [filename UTF8String]); 
        return NULL;  
    } else { 
        printf("[%ld] pages loaded in this PDF!\n", count); 
    } 
    return document; 

 
void DisplayPDFPage (CGContextRef myContext, size_t pageNumber, NSString *filename) 

    CGPDFDocumentRef document; 
    CGPDFPageRef page; 
     
    document = GetPDFDocumentRef (filename); 
    page = CGPDFDocumentGetPage (document, pageNumber); 
    CGContextDrawPDFPage (myContext, page); 
    CGPDFDocumentRelease (document); 


這樣顯示出來(lái)的pdf單頁(yè)是倒立的,Quartz坐標(biāo)系和UIView坐標(biāo)系不一樣所致,調(diào)整坐標(biāo)系,使pdf正立:

復(fù)制代碼 代碼如下:

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(context, 80, self.frame.size.height-60); 
CGContextScaleCTM(context, 1, -1); 


配合iOS5強(qiáng)大的UIPageViewController實(shí)現(xiàn)翻頁(yè)瀏覽

復(fù)制代碼 代碼如下:

- (PDFViewController *)viewControllerAtIndex:(NSUInteger)index  

    //Return the PDFViewController for the given index. 
    if (([self.pagePDF count] == 0 )|| (index > [self.pagePDF count]) ) { 
        return nil; 
    } 
     
    //Create a new view controller and pass suitable data. 
    PDFViewController *dataViewController = [[PDFViewController alloc]initWithNibName:@"PDFViewController" bundle:nil]; 
    //dataViewController.pdfview = [self.pagePDF objectAtIndex:index]; 
    dataViewController.pdfview = [[PDFView alloc]initWithFrame:self.view.frame atPage:index]; 
    [dataViewController.view addSubview:dataViewController.pdfview]; 
    NSLog(@"index = %d",index); 
    return dataViewController; 

 
- (NSUInteger) indexOfViewController:(PDFViewController *)viewController 

    return [self.pagePDF indexOfObject:viewController.pdfview]; 

 
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 

    NSUInteger index = [self indexOfViewController:(PDFViewController *)viewController]; 
    if ((index == 0 ) || (index == NSNotFound)){ 
        return nil; 
    } 
     
    index--; 
    return  [self viewControllerAtIndex:index]; 

 
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 

    NSUInteger index = [self indexOfViewController:(PDFViewController *)viewController]; 
    if (index == NSNotFound) 
    { 
        return nil; 
    } 
     
    index++; 
     
    if (index == [self.pagePDF count]){ 
        return  nil; 
    } 
     
    return [self viewControllerAtIndex:index]; 


2015102894406303.png (385×514)

2015102894427910.png (385×512)

涂鴉效果
主要涉及:
1. 多context,分層畫(huà)畫(huà)

復(fù)制代碼 代碼如下:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx


2. 觸摸事件touches族那些event

復(fù)制代碼 代碼如下:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
……


3. 初始化單頁(yè)view傳頁(yè)碼

復(fù)制代碼 代碼如下:

- (id)initWithFrame:(CGRect)frame onPage:(NSInteger)page


4.畫(huà)軌跡方法

復(fù)制代碼 代碼如下:

CG_EXTERN void CGPathMoveToPoint(CGMutablePathRef path,
  const CGAffineTransform *m, CGFloat x, CGFloat y)
CG_EXTERN void CGPathAddLineToPoint(CGMutablePathRef path,
  const CGAffineTransform *m, CGFloat x, CGFloat y)


2015102894449261.png (383×512)

2015102894506965.png (386×513)

2015102894558662.png (770×575)

2015102894619851.png (770×577)

您可能感興趣的文章:

相關(guān)文章

  • 詳解如何攔截iOS所有網(wǎng)絡(luò)請(qǐng)求

    詳解如何攔截iOS所有網(wǎng)絡(luò)請(qǐng)求

    這篇文章主要介紹了詳解如何攔截iOS所有網(wǎng)絡(luò)請(qǐng)求,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • iOS給密碼進(jìn)行加密的方法

    iOS給密碼進(jìn)行加密的方法

    這篇文章主要介紹了iOS給密碼進(jìn)行加密的方法,需要的朋友可以參考下
    2017-06-06
  • IOS App 無(wú)代碼入侵的方法hook詳細(xì)介紹

    IOS App 無(wú)代碼入侵的方法hook詳細(xì)介紹

    這篇文章主要介紹了IOS App 無(wú)代碼入侵的方法hook詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • iOS遍歷集合(NSArray、NSDictionary、NSSet)的方法總結(jié)

    iOS遍歷集合(NSArray、NSDictionary、NSSet)的方法總結(jié)

    這篇文章主要介紹了iOS集合遍歷(NSArray、NSDictionary、NSSet)的方法,文中給出了詳細(xì)的方法示例,并總結(jié)了各個(gè)方法的優(yōu)缺點(diǎn)來(lái)供大家學(xué)習(xí)參考,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • iOS中如何獲取某個(gè)視圖的截圖詳析

    iOS中如何獲取某個(gè)視圖的截圖詳析

    這篇文章主要給大家介紹了關(guān)于在iOS中如何獲取某個(gè)視圖的截圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位iOS開(kāi)發(fā)者們有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • iOS開(kāi)發(fā)-實(shí)現(xiàn)大文件下載與斷點(diǎn)下載思路

    iOS開(kāi)發(fā)-實(shí)現(xiàn)大文件下載與斷點(diǎn)下載思路

    本篇文章主要介紹了iOS開(kāi)發(fā)-實(shí)現(xiàn)大文件下載與斷點(diǎn)下載思路,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • ios微信瀏覽器返回不刷新問(wèn)題完美解決方法

    ios微信瀏覽器返回不刷新問(wèn)題完美解決方法

    這篇文章主要介紹了ios微信瀏覽器返回不刷新問(wèn)題完美解決方法,需要的朋友可以參考下
    2017-09-09
  • iOS消息發(fā)送和轉(zhuǎn)發(fā)示例詳解

    iOS消息發(fā)送和轉(zhuǎn)發(fā)示例詳解

    這篇文章主要給大家介紹了關(guān)于iOS消息發(fā)送和轉(zhuǎn)發(fā)的相關(guān)資料,用Objective-C的術(shù)語(yǔ)來(lái)講,這叫做“給某個(gè)對(duì)象發(fā)送某條消息”。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • iOS常用調(diào)試方法之靜態(tài)分析詳解

    iOS常用調(diào)試方法之靜態(tài)分析詳解

    這篇文章主要給大家介紹了關(guān)于iOS常用調(diào)試方法之靜態(tài)分析的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位iOS開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • iOS 修改alertViewController彈框的字體顏色及字體的方法

    iOS 修改alertViewController彈框的字體顏色及字體的方法

    下面小編就為大家分享一篇iOS 修改alertViewController彈框的字體顏色及字體的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01

最新評(píng)論