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];
}
}
}
なぜ私がこのパフォーマンスの問題に直面しているのか、誰かが考えていますか? 注釈を間違った方法で初期化していますか?