에 애니메이션 않는다 '도구 모음 스타일'탭보기 컨트롤러에이 솔루션을 가서 멋진 크로스 페이드 효과를 지원 있는지 파악합니다. 스토리 보드 디자이너에서 NSTabViewController의 사용자 정의 클래스 이름 필드에 'TabViewController'를 추가하십시오. 각 viewController에 제목을 할당하는 것을 잊지 마세요, 이것이 키 값으로 사용됩니다.
import Cocoa
class TabViewController: NSTabViewController {
private lazy var tabViewSizes: [String : NSSize] = [:]
override func viewDidLoad() {
// Add size of first tab to tabViewSizes
if let viewController = self.tabViewItems.first?.viewController, let title = viewController.title {
tabViewSizes[title] = viewController.view.frame.size
}
super.viewDidLoad()
}
override func transition(from fromViewController: NSViewController, to toViewController: NSViewController, options: NSViewController.TransitionOptions, completionHandler completion: (() -> Void)?) {
NSAnimationContext.runAnimationGroup({ context in
context.duration = 0.5
self.updateWindowFrameAnimated(viewController: toViewController)
super.transition(from: fromViewController, to: toViewController, options: [.crossfade, .allowUserInteraction], completionHandler: completion)
}, completionHandler: nil)
}
func updateWindowFrameAnimated(viewController: NSViewController) {
guard let title = viewController.title, let window = view.window else {
return
}
let contentSize: NSSize
if tabViewSizes.keys.contains(title) {
contentSize = tabViewSizes[title]!
}
else {
contentSize = viewController.view.frame.size
tabViewSizes[title] = contentSize
}
let newWindowSize = window.frameRect(forContentRect: NSRect(origin: NSPoint.zero, size: contentSize)).size
var frame = window.frame
frame.origin.y += frame.height
frame.origin.y -= newWindowSize.height
frame.size = newWindowSize
window.animator().setFrame(frame, display: false)
}
}
출처
2018-02-19 15:20:52
Ely
이 작동하지만 높이보기 애니메이션이 움직이지 않습니다. 해당 탭을 선택하면 새 크기로 다시 그립니다. 애니메이션 높이 변경을 지원하는 트릭이 있습니까? – mixtly87