On this page
Guides
Adjust Existing Measurement Annotations
For existing measurement annotations, when changing the measurement points (such as savePoints
for CPDFPolylineAnnotation
), it's necessary to refresh the measurement properties to obtain the new measurement values.
Note: You cannot remove the measurement properties by setting them to nil.
Below is an example code for modifying an existing polyline distance measurement annotation:
swift
// Get the page object where the annotation needs to be created
if let page = document?.page(at: 0) {
// Create a polyline annotation
var anotation = CPDFPolylineAnnotation(document: document)
// Set the vertex of the polyline
var pointsArray: [NSValue] = []
let point1 = CGPoint(x: 100, y: 100)
pointsArray.append(NSValue(cgPoint: point1))
let point2 = CGPoint(x: 100, y: 200)
pointsArray.append(NSValue(cgPoint: point2))
let point3 = CGPoint(x: 200, y: 200)
pointsArray.append(NSValue(cgPoint: point3))
anotation?.setSavePoints(pointsArray)
// Set the measurement properties for the polyline annotation
var measureInfo = CPDFPerimeterMeasureInfo()
anotation.measureInfo = measureInfo;
// Update the appearance of the annotation to display it on the document
page.addAnnotation(anotation!)
// Add a new vertex to the polyline
let point4 = CGPoint(x: 200, y: 300)
pointsArray.append(NSValue(cgPoint: point4))
anotation?.setSavePoints(pointsArray)
// Refresh the measurement properties to recalculate
// Set MeasureInfo: This information will not be effective until it is added to the page
anotation.measureInfo = measureInfo;
// Refresh the appearance of the annotation
anotation.updateAppearanceStream()
}
objective-c
// Get the page object where the annotation needs to be created
CPDFPage *page = [document pageAtIndex:0];
// Create a polyline annotation
CPDFPolylineAnnotation *anotation = [[CPDFPolylineAnnotation alloc] initWithDocument:document];
// Set the vertex of the polyline
NSMutableArray<NSValue *> *pointsArray = [NSMutableArray array];
CGPoint point1 = CGPointMake(100, 100);
[pointsArray addObject:[NSValue valueWithCGPoint:point1]];
CGPoint point2 = CGPointMake(100, 200);
[pointsArray addObject:[NSValue valueWithCGPoint:point2]];
CGPoint point3 = CGPointMake(200, 200);
[pointsArray addObject:[NSValue valueWithCGPoint:point3]];
[anotation setSavePoints:savePoints];
// Set the measurement properties for the polyline annotation
CPDFPerimeterMeasureInfo *measureInfo = [[CPDFPerimeterMeasureInfo alloc] init];
[anotation setMeasureInfo:measureInfo];
// Update the appearance of the annotation to display it on the document
[page addAnnotation:anotation];
// Add a new vertex to the polyline
CGPoint point4 = CGPointMake(200, 300);
[pointsArray addObject:[NSValue valueWithCGPoint:point4]];
[anotation setSavePoints:savePoints];
// Refresh the measurement properties to recalculate
// Set MeasureInfo: This information will not be effective until it is added to the page
anotation.measureInfo = measureInfo;
// Refresh the appearance of the annotation
[anotation updateAppearanceStream];