Документация для -[NSString drawAtPoint:withAttributes:]
гласит следующее:
Ширина (высота для вертикального расположения) области рендеринга не ограничена, в отличие от drawInRect:withAttributes:
, в котором используется ограничительный прямоугольник. В результате этот метод отображает текст в одну строку.
Поскольку ширина не ограничена, этот метод отбрасывает выравнивание абзаца и всегда отображает строку по левому краю.
Вы должны использовать -[NSString drawInRect:withAttributes:]
вместо этого. Поскольку он принимает рамку, а рамка имеет ширину, он может вычислять выравнивания по центру. Например:
NSMutableParagraphStyle * paragraphStyle =
[[[NSParagraphStyle defaultParagraphStyle] mutableCopy] autorelease];
[paragraphStyle setAlignment:NSCenterTextAlignment];
NSDictionary * attributes = [NSDictionary dictionaryWithObject:paragraphStyle
forKey:NSParagraphStyleAttributeName];
NSString * mystr = @"this is a long line \n and \n this is also a long line";
NSRect strFrame = { { 20, 20 }, { 200, 200 } };
[mystr drawInRect:strFrame withAttributes:attributes];
Обратите внимание, что вы пропускаете paragraphStyle
в исходном коде.