Как мне центрировать NSView в NSScrollView, как это делает «Предварительный просмотр»?
Центрировать NSView в NSScrollView
Ответы (2)
Прочтите Scroll View Programming Guide о прокрутке до определенной позиции. Там есть примеры для верха или низа. Вы просто изменили бы математику, чтобы вычислить происхождение на основе середины вашего NSView. Что-то типа:
-(void)scrollToCenter:(NSScrollView*)scrollView
{
const CGFloat midX = NSMidX([[scrollView documentView] bounds]);
const CGFloat midY = NSMidY([[scrollView documentView] bounds]);
const CGFloat halfWidth = NSWidth([[scrollView contentView] frame]) / 2.0;
const CGFloat halfHeight = NSHeight([[scrollView contentView] frame]) / 2.0;
NSPoint newOrigin;
if([[scrollView documentView] isFlipped])
{
newOrigin = NSMakePoint(midX - halfWidth, midY + halfHeight);
}
else
{
newOrigin = NSMakePoint(midX - halfWidth, midY - halfHeight);
}
[[scrollView documentView] scrollPoint:newOrigin];
}
person
nall
schedule
21.11.2009
Это не работает, когда вид документа меньше, чем вид прокрутки. Представление документа закреплено внизу слева (или вверху слева, если перевернуто).
- person Nicolas Miari; 04.11.2013
В Свифте:
extension NSScrollView {
func scrollToCenter() {
guard let docView = documentView else { return }
let center = CGPoint(
x: docView.bounds.midX - contentView.frame.width / 2,
y: docView.bounds.midY - (docView.isFlipped ? -1 : 1) * contentView.frame.height / 2
)
docView.scroll(center)
}
}
person
duan
schedule
13.11.2018