【发布时间】:2020-05-26 22:28:56
【问题描述】:
下面是我用来设置滚动视图 documentView 的新大小的函数,但是我不知道如何将帧大小的变化与滚动位置的变化结合起来。如果我对事物应用动画,因为它们的大小会发生变化,并且图像相对于左下角移动,然后图像会滚动回原位。如何组合动画以使大小变化和滚动位置一起变化 - 或任何其他方式来实现平滑放大/缩小。
func zoomIn(zoomFactor: CGFloat = zoomFactor){
guard let docView = self.docView, let scrollView = self.scrollView else {
return
}
let visible = scrollView.documentVisibleRect
let newrect = NSInsetRect(visible, NSWidth(visible)*(1 - 1/zoomFactor)/2.0, NSHeight(visible)*(1 - 1/zoomFactor)/2.0);
let frame = docView.frame
self.execZoom(docView: docView,
size:CGSize(width: zoomFactor, height: zoomFactor),
frame:CGRect(x: 0, y: 0, width: frame.size.width * zoomFactor, height: frame.size.height * zoomFactor),
origin:newrect.origin)
}
func zoomOut(zoomFactor: CGFloat = zoomFactor){
guard let docView = self.docView, let scrollView = self.scrollView else {
return
}
let visible = scrollView.documentVisibleRect
let newrect = NSOffsetRect(visible, -NSWidth(visible)*(zoomFactor - 1)/2.0, -NSHeight(visible)*(zoomFactor - 1)/2.0)
let frame = docView.frame
self.execZoom(docView: docView,
size: CGSize(width: 1/zoomFactor, height: 1/zoomFactor),
frame: CGRect(x: 0, y: 0, width: frame.size.width / zoomFactor, height: frame.size.height / zoomFactor),
origin: newrect.origin)
}
func execZoom(docView: NSView, size: CGSize, frame: CGRect, origin: CGPoint){
docView.scaleUnitSquare(to: size)
docView.frame = frame
docView.scroll(origin)
}
【问题讨论】:
标签: zooming nsscrollview