0

IOS PDFKIT を使用して PDF にテキスト ウィジェットを追加しようとしています。その目標を達成するために、私はPDFAnnottaionクラスを使用しています。

私の問題は、複数の注釈 (15 のようなもの) を追加した後、注釈を追加するとクラッシュする RAM の使用のために、アプリが大きなパフォーマンスの問題に直面していることです。アプリがクラッシュしたときのエラー メッセージは次のとおりです。

* 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