12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- //
- // KMSplitView.m
- // SignFlow
- //
- // Created by wanjun on 2021/5/26.
- //
- #import "KMSplitView.h"
- #import <QuartzCore/QuartzCore.h>
- NSString *CPDFOfficeSplitViewAnimationDidEndNotification = @"CPDFOfficeSplitViewAnimationDidEndNotification";
- NSString *CPDFOfficeDisableAnimationsKey = @"CPDFOfficeDisableAnimationsKey";
- @implementation KMSplitView
- @synthesize animating;
- + (id)defaultAnimationForKey:(NSString *)key {
- if ([key isEqualToString:@"firstSplitPosition"] || [key isEqualToString:@"secondSplitPosition"])
- return [CABasicAnimation animation];
- else
- return [super defaultAnimationForKey:key];
- }
- - (NSColor*)dividerColor {
- return [NSColor whiteColor];
- }
- - (CGFloat)firstSplitPosition {
- NSView *view = [[self subviews] objectAtIndex:0];
- if ([self isSubviewCollapsed:view])
- return [self minPossiblePositionOfDividerAtIndex:0];
- else if ([self isVertical])
- return NSMaxX([view frame]);
- else
- return NSMaxY([view frame]);
- }
- - (void)setFirstSplitPosition:(CGFloat)position {
- [self setPosition:position ofDividerAtIndex:0];
- }
- - (CGFloat)secondSplitPosition {
- NSView *view = [[self subviews] objectAtIndex:1];
- if ([self isSubviewCollapsed:view])
- return [self minPossiblePositionOfDividerAtIndex:1];
- else if ([self isVertical])
- return NSMaxX([view frame]);
- else
- return NSMaxY([view frame]);
- }
- - (void)setSecondSplitPosition:(CGFloat)position {
- [self setPosition:position ofDividerAtIndex:1];
- }
- - (void)setPosition:(CGFloat)position ofDividerAtIndex:(NSInteger)dividerIndex animate:(BOOL)animate {
- if ([[NSUserDefaults standardUserDefaults] boolForKey:CPDFOfficeDisableAnimationsKey] || dividerIndex > 1)
- animate = NO;
-
- if (animating) {
- // do nothing
- } else if (animate == NO) {
- [self setPosition:position ofDividerAtIndex:dividerIndex];
- } else {
- animating = YES;
- [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
- if (dividerIndex == 0)
- [[self animator] setFirstSplitPosition:position];
- else if (dividerIndex == 1)
- [[self animator] setSecondSplitPosition:position];
- else
- [self setPosition:position ofDividerAtIndex:dividerIndex];
- }
- completionHandler:^{
- animating = NO;
- [[NSNotificationCenter defaultCenter] postNotificationName:CPDFOfficeSplitViewAnimationDidEndNotification object:self];
- }];
- }
- }
- @end
|