0

我正在尝试使用 IOS PDFKIT 将文本小部件添加到我的 pdf 中。所以为了实现这个目标,我正在使用这个PDFAnnottaion类。

我的问题是,在添加多个注释(大约 15 个)后,我的应用程序面临一个很大的性能问题,因为如果我添加更多注释,内存使用会导致其崩溃。这是我的应用程序崩溃时的错误消息:

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BREAKPOINT (code=1, subcode=0x190f1b22c)
    frame #0: 0x0000000190f1b22c CoreFoundation`CFRelease.cold.1 + 16
CoreFoundation`CFRelease.cold.1:
->  0x190f1b22c <+16>: brk    #0x1
CoreFoundation`__CFStringCollectionCopy.cold.1:
    0x190f1b230 <+0>:  adrp   x8, 347691
    0x190f1b234 <+4>:  adrp   x9, 482
    0x190f1b238 <+8>:  add    x9, x9, #0xab2            ; =0xab2
Target 0: (Runner) stopped.

错误消息让我认为该错误与内存有关,但我不确定。

您可以在下面找到我用来创建和添加注释的代码:

    CGSize newSize = CGSizeMake(_pointer.size.width * pointerScale,_pointer.size.height * pointerScale);
    
    CGRect parentRect = _pdfView.bounds;;
    
    double x = parentRect.size.width / [observation.xScale doubleValue] ;
    double y = parentRect.size.height / [observation.yScale doubleValue];

    PDFAnnotation * observationText =  [[PDFAnnotation alloc] initWithBounds:CGRectMake(x + newSize.width /2 ,y + newSize.height /2 ,10, 10) forType: PDFAnnotationSubtypeText withProperties: nil];;
    
     observationText.contents = [NSString stringWithFormat:@"%@", observation.observationId];
     observationText.fontColor = UIColor.blackColor;
     observationText.color = UIColor.clearColor;
    
     if(_pdPage != nil){
         [_pdPage addAnnotation:observationText];
         observation.textAnnotation = observationText;
     }

这就是我加载 pdf 的方式:


 if ([filePath isKindOfClass:[NSString class]]) {
            NSURL * sourcePDFUrl = [NSURL fileURLWithPath:filePath];
            PDFDocument * document = [[PDFDocument alloc] initWithURL: sourcePDFUrl];

            if (document == nil) {
              NSLog(@"cannot create document: File not in PDF format or corrupted.");
            } else {
                _pdfView.autoresizesSubviews = YES;
                _pdfView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
                _pdfView.backgroundColor = [UIColor colorWithWhite:0.95 alpha:1.0];
                _pdfView.displayDirection = kPDFDisplayDirectionVertical;
                _pdfView.displayMode = kPDFDisplaySinglePage;
                _pdfView.document = document;
                
                PDFPage* page = [document pageAtIndex:0];
                _pdPage = page;
                UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action: @selector(onTap:)];
                UILongPressGestureRecognizer * longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action: @selector(longPress:)];

                tapGesture.numberOfTapsRequired = 1;
                tapGesture.numberOfTouchesRequired = 1;
                
                [_pdfView addGestureRecognizer:tapGesture];
                [_pdfView addGestureRecognizer:longPressGesture];

                movedObservation = nil;
                [_pdfView goToPage: page];

                CGRect pageRect = [page boundsForBox:[_pdfView displayBox]];
                CGRect parentRect = [[UIScreen mainScreen] bounds];

                if (frame.size.width > 0 && frame.size.height > 0) {
                    parentRect = frame;
                }

                CGFloat scale = 1.0f;
                if (parentRect.size.width / parentRect.size.height >= pageRect.size.width / pageRect.size.height) {
                    scale = parentRect.size.height / pageRect.size.height;
                } else {
                    scale = parentRect.size.width / pageRect.size.width;
                }

                NSLog(@"scale %f", scale);

                _pdfView.scaleFactor = scale;
                _pdfView.minScaleFactor = scale;
                _pdfView.maxScaleFactor = 4.0;
                for(Observation * observation in _observations) {
                    [self drawObservation:observation];
                }
            }
        }

那么有人知道我为什么会面临这种性能问题吗?我是否以错误的方式初始化我的注释?

4

0 回答 0