Я написал код, использующий макет CoreText для некоторых текстов, как на картинке ниже. Красный прямоугольник — это текстовая область, черный прямоугольник пуст для изображений или других объектов. Я использую kCTFrameClippingPathsAttributeName
, чтобы сообщить CoreText, что черный прямоугольник не будет отображать тексты.
Подробное изображение, как показано ниже:
Почему текст разрывается в этой позиции? Красный прямоугольник и черный прямоугольник имеют очень маленькую площадь, размер всего 1 пиксель в ширину, почему текст выходит?
Правая красная прямоугольная рамка — (533, 40, 440, 668)
, правая маленькая прямоугольная рамка — (534, 98, 440, 399)
.
такой код:
CGPathRef textArea;
// An array of clipping paths
NSMutableArray * clippingPaths = [NSMutableArray array];
for (TNPageMedium *medium in self.media) {
NSDictionary *clippingPathDict = @{(NSString *)kCTFramePathClippingPathAttributeName:(__bridge id)path};
[clippingPaths addObject:clippingPathDict];
}
NSDictionary *optionsDict = @{(NSString*)kCTFrameClippingPathsAttributeName : clippingPaths};
// create frame using texAreaPath, an optionDictionary contains clipping paths
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(pos, 0), textAreaPath, (__bridge CFDictionaryRef)(optionsDict));
// Draw Frame
CTFrameDraw(frame, context);