diff --git a/AsyncDisplayKit.xcodeproj/project.pbxproj b/AsyncDisplayKit.xcodeproj/project.pbxproj index 7c880f867d..096b77cefe 100644 --- a/AsyncDisplayKit.xcodeproj/project.pbxproj +++ b/AsyncDisplayKit.xcodeproj/project.pbxproj @@ -324,6 +324,10 @@ 9C55866C1BD54A3000B50E3A /* ASAsciiArtBoxCreator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C5586671BD549CB00B50E3A /* ASAsciiArtBoxCreator.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9C6BB3B21B8CC9C200F13F52 /* ASStaticLayoutable.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6BB3B01B8CC9C200F13F52 /* ASStaticLayoutable.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9C6BB3B31B8CC9C200F13F52 /* ASStaticLayoutable.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6BB3B01B8CC9C200F13F52 /* ASStaticLayoutable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C70F2031CDA4EFA007D6C76 /* ASDisplayTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C70F2011CDA4EFA007D6C76 /* ASDisplayTraits.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C70F2041CDA4EFA007D6C76 /* ASDisplayTraits.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C70F2021CDA4EFA007D6C76 /* ASDisplayTraits.m */; }; + 9C70F2051CDA4F06007D6C76 /* ASDisplayTraits.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C70F2021CDA4EFA007D6C76 /* ASDisplayTraits.m */; }; + 9C70F2061CDA4F0C007D6C76 /* ASDisplayTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C70F2011CDA4EFA007D6C76 /* ASDisplayTraits.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9C8221951BA237B80037F19A /* ASStackBaselinePositionedLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8221931BA237B80037F19A /* ASStackBaselinePositionedLayout.h */; }; 9C8221961BA237B80037F19A /* ASStackBaselinePositionedLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8221931BA237B80037F19A /* ASStackBaselinePositionedLayout.h */; }; 9C8221971BA237B80037F19A /* ASStackBaselinePositionedLayout.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9C8221941BA237B80037F19A /* ASStackBaselinePositionedLayout.mm */; }; @@ -801,6 +805,8 @@ 9C5586671BD549CB00B50E3A /* ASAsciiArtBoxCreator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASAsciiArtBoxCreator.h; path = AsyncDisplayKit/Layout/ASAsciiArtBoxCreator.h; sourceTree = ""; }; 9C5586681BD549CB00B50E3A /* ASAsciiArtBoxCreator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASAsciiArtBoxCreator.m; path = AsyncDisplayKit/Layout/ASAsciiArtBoxCreator.m; sourceTree = ""; }; 9C6BB3B01B8CC9C200F13F52 /* ASStaticLayoutable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASStaticLayoutable.h; path = AsyncDisplayKit/Layout/ASStaticLayoutable.h; sourceTree = ""; }; + 9C70F2011CDA4EFA007D6C76 /* ASDisplayTraits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASDisplayTraits.h; sourceTree = ""; }; + 9C70F2021CDA4EFA007D6C76 /* ASDisplayTraits.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASDisplayTraits.m; sourceTree = ""; }; 9C8221931BA237B80037F19A /* ASStackBaselinePositionedLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASStackBaselinePositionedLayout.h; sourceTree = ""; }; 9C8221941BA237B80037F19A /* ASStackBaselinePositionedLayout.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASStackBaselinePositionedLayout.mm; sourceTree = ""; }; 9C8898BA1C738B9800D6B02E /* ASTextKitFontSizeAdjuster.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ASTextKitFontSizeAdjuster.mm; path = TextKit/ASTextKitFontSizeAdjuster.mm; sourceTree = ""; }; @@ -1223,6 +1229,8 @@ 205F0E0D1B371875007741D0 /* UICollectionViewLayout+ASConvenience.h */, 205F0E0E1B371875007741D0 /* UICollectionViewLayout+ASConvenience.m */, 058D09FF195D050800B7D73C /* UIView+ASConvenience.h */, + 9C70F2011CDA4EFA007D6C76 /* ASDisplayTraits.h */, + 9C70F2021CDA4EFA007D6C76 /* ASDisplayTraits.m */, ); path = Details; sourceTree = ""; @@ -1520,6 +1528,7 @@ 257754A81BEE44CD00737CA5 /* ASTextKitContext.h in Headers */, DB55C2611C6408D6004EDCF5 /* _ASTransitionContext.h in Headers */, 464052221A3F83C40061C0BA /* ASFlowLayoutController.h in Headers */, + 9C70F2031CDA4EFA007D6C76 /* ASDisplayTraits.h in Headers */, 257754AF1BEE44CD00737CA5 /* ASTextKitRenderer+TextChecking.h in Headers */, 058D0A57195D05DC00B7D73C /* ASHighlightOverlayLayer.h in Headers */, 058D0A7C195D05F900B7D73C /* ASImageNode+CGExtras.h in Headers */, @@ -1656,6 +1665,7 @@ 34EFC75B1B701BAF00AD841F /* ASDimension.h in Headers */, A37320101C571B740011FC94 /* ASTextNode+Beta.h in Headers */, DBABFAFC1C6A8D2F0039EA4A /* _ASTransitionContext.h in Headers */, + 9C70F2061CDA4F0C007D6C76 /* ASDisplayTraits.h in Headers */, 254C6B801BF94DF4003EC431 /* ASEqualityHashHelpers.h in Headers */, B350624F1B010EFD0018CF92 /* ASDisplayNode+DebugTiming.h in Headers */, B35061FD1B010EFD0018CF92 /* ASDisplayNode+Subclasses.h in Headers */, @@ -2043,6 +2053,7 @@ ACF6ED521B17847A00DA7C62 /* ASStackUnpositionedLayout.mm in Sources */, 257754A61BEE44CD00737CA5 /* ASTextKitAttributes.mm in Sources */, 81EE38501C8E94F000456208 /* ASRunLoopQueue.mm in Sources */, + 9C70F2041CDA4EFA007D6C76 /* ASDisplayTraits.m in Sources */, 92074A691CC8BADA00918F75 /* ASControlNode+tvOS.m in Sources */, ACF6ED321B17843500DA7C62 /* ASStaticLayoutSpec.mm in Sources */, AC026B6B1BD57D6F00BBC17E /* ASChangeSetDataController.m in Sources */, @@ -2193,6 +2204,7 @@ 34EFC7721B701D0300AD841F /* ASStackLayoutSpec.mm in Sources */, 34EFC7761B701D2A00AD841F /* ASStackPositionedLayout.mm in Sources */, 7AB338661C55B3420055FDE8 /* ASRelativeLayoutSpec.mm in Sources */, + 9C70F2051CDA4F06007D6C76 /* ASDisplayTraits.m in Sources */, 34EFC7781B701D3100AD841F /* ASStackUnpositionedLayout.mm in Sources */, DE84918E1C8FFF9F003D89E9 /* ASRunLoopQueue.mm in Sources */, AC026B6C1BD57D6F00BBC17E /* ASChangeSetDataController.m in Sources */, diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 8ee237f50b..e1907f0fa9 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -22,6 +22,7 @@ #import "_ASCoreAnimationExtras.h" #import "ASDisplayNodeLayoutContext.h" #import "ASDisplayNodeExtras.h" +#import "ASDisplayTraits.h" #import "ASEqualityHelpers.h" #import "ASRunLoopQueue.h" #import "ASEnvironmentInternal.h" @@ -2720,6 +2721,11 @@ static const char *ASDisplayNodeDrawingPriorityKey = "ASDrawingPriority"; ASEnvironmentLayoutOptionsForwarding ASEnvironmentLayoutExtensibilityForwarding +- (ASDisplayTraits *)displayTraits +{ + ASDN::MutexLocker l(_propertyLock); + return [ASDisplayTraits displayTraitsWithASEnvironmentDisplayTraits:_environmentState.displayTraits]; +} #if TARGET_OS_TV #pragma mark - UIFocusEnvironment Protocol (tvOS) diff --git a/AsyncDisplayKit/ASViewController.h b/AsyncDisplayKit/ASViewController.h index fda6adb12d..e1b43342ec 100644 --- a/AsyncDisplayKit/ASViewController.h +++ b/AsyncDisplayKit/ASViewController.h @@ -9,10 +9,12 @@ #import #import +@class ASDisplayTraits; + NS_ASSUME_NONNULL_BEGIN -typedef ASEnvironmentDisplayTraits (^ASEnvironmentDisplayTraitsForTraitCollectionBlock)(UITraitCollection *traitCollection); -typedef ASEnvironmentDisplayTraits (^ASEnvironmentDisplayTraitsForTraitWindowSizeBlock)(CGSize windowSize); +typedef ASDisplayTraits * _Nonnull (^ASDisplayTraitsForTraitCollectionBlock)(UITraitCollection *traitCollection); +typedef ASDisplayTraits * _Nonnull (^ASDisplayTraitsForTraitWindowSizeBlock)(CGSize windowSize); @interface ASViewController<__covariant DisplayNodeType : ASDisplayNode *> : UIViewController @@ -25,12 +27,12 @@ typedef ASEnvironmentDisplayTraits (^ASEnvironmentDisplayTraitsForTraitWindowSiz /** * Set this block to customize the ASDisplayTraits returned when the VC transitions to the given traitCollection. */ -@property (nonatomic, copy) ASEnvironmentDisplayTraitsForTraitCollectionBlock overrideDisplayTraitsWithTraitCollection; +@property (nonatomic, copy) ASDisplayTraitsForTraitCollectionBlock overrideDisplayTraitsWithTraitCollection; /** * Set this block to customize the ASDisplayTraits returned when the VC transitions to the given window size. */ -@property (nonatomic, copy) ASEnvironmentDisplayTraitsForTraitWindowSizeBlock overrideDisplayTraitsWithWindowSize; +@property (nonatomic, copy) ASDisplayTraitsForTraitWindowSizeBlock overrideDisplayTraitsWithWindowSize; /** * @abstract Passthrough property to the the .interfaceState of the node. diff --git a/AsyncDisplayKit/ASViewController.mm b/AsyncDisplayKit/ASViewController.mm index 6643cdcb7b..b4834581de 100644 --- a/AsyncDisplayKit/ASViewController.mm +++ b/AsyncDisplayKit/ASViewController.mm @@ -11,6 +11,7 @@ #import "ASDimension.h" #import "ASDisplayNode+FrameworkPrivate.h" #import "ASDisplayNode+Beta.h" +#import "ASDisplayTraits.h" #import "ASEnvironmentInternal.h" #import "ASRangeControllerUpdateRangeProtocol+Beta.h" @@ -146,7 +147,9 @@ - (ASEnvironmentDisplayTraits)displayTraitsForTraitCollection:(UITraitCollection *)traitCollection { if (self.overrideDisplayTraitsWithTraitCollection) { - return self.overrideDisplayTraitsWithTraitCollection(traitCollection); + ASDisplayTraits *displayTraits = self.overrideDisplayTraitsWithTraitCollection(traitCollection); + displayTraits.isMutable = NO; + return [displayTraits environmentDisplayTraits]; } ASEnvironmentDisplayTraits displayTraits = ASEnvironmentDisplayTraitsFromUITraitCollection(traitCollection); @@ -157,7 +160,9 @@ - (ASEnvironmentDisplayTraits)displayTraitsForWindowSize:(CGSize)windowSize { if (self.overrideDisplayTraitsWithWindowSize) { - return self.overrideDisplayTraitsWithWindowSize(windowSize); + ASDisplayTraits *displayTraits = self.overrideDisplayTraitsWithWindowSize(windowSize); + displayTraits.isMutable = NO; + return [displayTraits environmentDisplayTraits]; } return self.node.environmentState.displayTraits; } diff --git a/AsyncDisplayKit/Details/ASDisplayTraits.h b/AsyncDisplayKit/Details/ASDisplayTraits.h new file mode 100644 index 0000000000..983487d2b0 --- /dev/null +++ b/AsyncDisplayKit/Details/ASDisplayTraits.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2014-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import +#import + +@interface ASDisplayTraits : NSObject + +@property (nonatomic, assign) BOOL isMutable; + +@property (nonatomic, assign) CGFloat displayScale; +@property (nonatomic, assign) UIUserInterfaceSizeClass horizontalSizeClass; +@property (nonatomic, assign) UIUserInterfaceIdiom userInterfaceIdiom; +@property (nonatomic, assign) UIUserInterfaceSizeClass verticalSizeClass; +@property (nonatomic, assign) UIForceTouchCapability forceTouchCapability; + ++ (ASDisplayTraits *)displayTraitsWithASEnvironmentDisplayTraits:(ASEnvironmentDisplayTraits)traits; ++ (ASDisplayTraits *)displayTraitsWithUITraitCollection:(UITraitCollection *)traitCollection; + +- (ASEnvironmentDisplayTraits)environmentDisplayTraits; + +@end diff --git a/AsyncDisplayKit/Details/ASDisplayTraits.m b/AsyncDisplayKit/Details/ASDisplayTraits.m new file mode 100644 index 0000000000..77478cb672 --- /dev/null +++ b/AsyncDisplayKit/Details/ASDisplayTraits.m @@ -0,0 +1,91 @@ +// +// ASDisplayTraits.m +// AsyncDisplayKit +// +// Created by Ricky Cancro on 5/4/16. +// Copyright © 2016 Facebook. All rights reserved. +// + +#import "ASDisplayTraits.h" +#import +#import + +@implementation ASDisplayTraits + +- (instancetype)init +{ + self = [super init]; + if (self) { + _isMutable = YES; + } + return self; +} + +- (void)setDisplayScale:(CGFloat)displayScale +{ + ASDisplayNodeAssert(self.isMutable, @"ASDisplayTraits is no longer mutable"); + _displayScale = displayScale; +} + +- (void)setHorizontalSizeClass:(UIUserInterfaceSizeClass)horizontalSizeClass +{ + ASDisplayNodeAssert(self.isMutable, @"ASDisplayTraits is no longer mutable"); + _horizontalSizeClass = horizontalSizeClass; +} + +- (void)setUserInterfaceIdiom:(UIUserInterfaceIdiom)userInterfaceIdiom +{ + ASDisplayNodeAssert(self.isMutable, @"ASDisplayTraits is no longer mutable"); + _userInterfaceIdiom = userInterfaceIdiom; +} + +- (void)setVerticalSizeClass:(UIUserInterfaceSizeClass)verticalSizeClass +{ + ASDisplayNodeAssert(self.isMutable, @"ASDisplayTraits is no longer mutable"); + _verticalSizeClass = verticalSizeClass; +} + +- (void)setForceTouchCapability:(UIForceTouchCapability)forceTouchCapability +{ + ASDisplayNodeAssert(self.isMutable, @"ASDisplayTraits is no longer mutable"); + _forceTouchCapability = forceTouchCapability; +} + ++ (ASDisplayTraits *)displayTraitsWithASEnvironmentDisplayTraits:(ASEnvironmentDisplayTraits)traits +{ + ASDisplayTraits *displayTraits = [[ASDisplayTraits alloc] init]; + displayTraits.displayScale = traits.displayScale; + displayTraits.horizontalSizeClass = traits.horizontalSizeClass; + displayTraits.verticalSizeClass = traits.verticalSizeClass; + displayTraits.userInterfaceIdiom = traits.userInterfaceIdiom; + displayTraits.forceTouchCapability = traits.forceTouchCapability; + return displayTraits; +} + ++ (ASDisplayTraits *)displayTraitsWithUITraitCollection:(UITraitCollection *)traitCollection +{ + ASDisplayTraits *displayTraits = [[ASDisplayTraits alloc] init]; + if (AS_AT_LEAST_IOS8) { + displayTraits.displayScale = traitCollection.displayScale; + displayTraits.horizontalSizeClass = traitCollection.horizontalSizeClass; + displayTraits.verticalSizeClass = traitCollection.verticalSizeClass; + displayTraits.userInterfaceIdiom = traitCollection.userInterfaceIdiom; + if (AS_AT_LEAST_IOS9) { + displayTraits.forceTouchCapability = traitCollection.forceTouchCapability; + } + } + return displayTraits; +} + +- (ASEnvironmentDisplayTraits)environmentDisplayTraits +{ + return (ASEnvironmentDisplayTraits) { + .displayScale = self.displayScale, + .horizontalSizeClass = self.horizontalSizeClass, + .userInterfaceIdiom = self.userInterfaceIdiom, + .verticalSizeClass = self.verticalSizeClass, + .forceTouchCapability = self.forceTouchCapability, + }; +} + +@end diff --git a/AsyncDisplayKit/Details/ASEnvironment.h b/AsyncDisplayKit/Details/ASEnvironment.h index 7f11925cd5..ff24ac0021 100644 --- a/AsyncDisplayKit/Details/ASEnvironment.h +++ b/AsyncDisplayKit/Details/ASEnvironment.h @@ -76,15 +76,14 @@ typedef struct ASEnvironmentDisplayTraits { // sure that it is valid. // // Use displayContext when you wish to pass view context specific data along with the - // trait collcetion to subnodes. This should be a piece of data owned by an + // display traits to subnodes. This should be a piece of data owned by an // ASViewController, which will ensure that the data is still valid when laying out // its subviews. When the VC is dealloc'ed, the displayContext it created will also // be dealloced but any subnodes that are hanging around (why would they be?) will now // have a displayContext that points to a bad pointer. // - // An added precaution is to call ASDisplayTraitsClearDisplayContext from your ASVC's desctructor + // As an added precaution ASDisplayTraitsClearDisplayContext is called from ASVC's desctructor // which will propagate a nil displayContext to its subnodes. - //__unsafe_unretained id displayContext; id __unsafe_unretained displayContext; } ASEnvironmentDisplayTraits; @@ -104,7 +103,7 @@ extern ASEnvironmentState ASEnvironmentStateMakeDefault(); ASDISPLAYNODE_EXTERN_C_END -@class ASTraitCollection; +@class ASDisplayTraits; #pragma mark - ASEnvironment @@ -131,6 +130,9 @@ ASDISPLAYNODE_EXTERN_C_END /// Classes should implement this method and return YES / NO dependent if downware propagation is enabled or not - (BOOL)supportsTraitsCollectionPropagation; +/// Returns an NSObject-representation of the environment's ASEnvironmentDisplayTraits +- (ASDisplayTraits *)displayTraits; + @end // ASCollection/TableNodes don't actually have ASCellNodes as subnodes. Because of this we can't rely on display trait diff --git a/AsyncDisplayKit/Details/ASEnvironment.mm b/AsyncDisplayKit/Details/ASEnvironment.mm index d57663d90e..c8b90acdfa 100644 --- a/AsyncDisplayKit/Details/ASEnvironment.mm +++ b/AsyncDisplayKit/Details/ASEnvironment.mm @@ -10,6 +10,7 @@ #import "ASEnvironment.h" #import "ASEnvironmentInternal.h" +#import ASEnvironmentLayoutOptionsState _ASEnvironmentLayoutOptionsStateMakeDefault() { @@ -46,14 +47,18 @@ ASEnvironmentDisplayTraits _ASEnvironmentDisplayTraitsMakeDefault() } ASEnvironmentDisplayTraits ASEnvironmentDisplayTraitsFromUITraitCollection(UITraitCollection *traitCollection) -{ - return (ASEnvironmentDisplayTraits) { - .displayScale = traitCollection.displayScale, - .horizontalSizeClass = traitCollection.horizontalSizeClass, - .userInterfaceIdiom = traitCollection.userInterfaceIdiom, - .verticalSizeClass = traitCollection.verticalSizeClass, - .forceTouchCapability = traitCollection.forceTouchCapability, - }; +{ + ASEnvironmentDisplayTraits displayTraits; + if (AS_AT_LEAST_IOS8) { + displayTraits.displayScale = traitCollection.displayScale; + displayTraits.horizontalSizeClass = traitCollection.horizontalSizeClass; + displayTraits.verticalSizeClass = traitCollection.verticalSizeClass; + displayTraits.userInterfaceIdiom = traitCollection.userInterfaceIdiom; + if (AS_AT_LEAST_IOS9) { + displayTraits.forceTouchCapability = traitCollection.forceTouchCapability; + } + } + return displayTraits; } BOOL ASEnvironmentDisplayTraitsIsEqualToASEnvironmentDisplayTraits(ASEnvironmentDisplayTraits displayTraits0, ASEnvironmentDisplayTraits displayTraits1) diff --git a/AsyncDisplayKit/Layout/ASLayoutSpec.mm b/AsyncDisplayKit/Layout/ASLayoutSpec.mm index dc15ac2916..ef1a32cb2b 100644 --- a/AsyncDisplayKit/Layout/ASLayoutSpec.mm +++ b/AsyncDisplayKit/Layout/ASLayoutSpec.mm @@ -12,6 +12,7 @@ #import "ASAssert.h" #import "ASBaseDefines.h" +#import "ASDisplayTraits.h" #import "ASEnvironmentInternal.h" #import "ASInternalHelpers.h" @@ -203,6 +204,12 @@ ASEnvironmentLayoutOptionsForwarding ASEnvironmentLayoutExtensibilityForwarding +- (ASDisplayTraits *)displayTraits +{ + ASDN::MutexLocker l(_propertyLock); + return [ASDisplayTraits displayTraitsWithASEnvironmentDisplayTraits:_environmentState.displayTraits]; +} + @end @implementation ASLayoutSpec (Debugging) diff --git a/Base/ASAvailability.h b/Base/ASAvailability.h index 78293c3d63..65fe04d647 100644 --- a/Base/ASAvailability.h +++ b/Base/ASAvailability.h @@ -23,6 +23,10 @@ #define kCFCoreFoundationVersionNumber_iOS_8_0 1140.1 #endif +#ifndef kCFCoreFoundationVersionNumber_iOS_8_4 +#define kCFCoreFoundationVersionNumber_iOS_8_4 1145.15 +#endif + #ifndef __IPHONE_7_0 #define __IPHONE_7_0 70000 #endif @@ -31,6 +35,10 @@ #define __IPHONE_8_0 80000 #endif +#ifndef __IPHONE_9_0 +#define __IPHONE_9_0 90000 +#endif + #ifndef AS_IOS8_SDK_OR_LATER #define AS_IOS8_SDK_OR_LATER __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0 #endif @@ -38,3 +46,4 @@ #define AS_AT_LEAST_IOS7 (kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iOS_6_1) #define AS_AT_LEAST_IOS7_1 (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_1) #define AS_AT_LEAST_IOS8 (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) +#define AS_AT_LEAST_IOS9 (kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iOS_8_4) diff --git a/examples/DisplayTraits/Sample/CollectionViewController.m b/examples/DisplayTraits/Sample/CollectionViewController.m index 66e7b92adc..018aac6e96 100644 --- a/examples/DisplayTraits/Sample/CollectionViewController.m +++ b/examples/DisplayTraits/Sample/CollectionViewController.m @@ -11,6 +11,7 @@ #import "CollectionViewController.h" #import "KittenNode.h" +#import @interface CollectionViewController () @property (nonatomic, strong) ASCollectionNode *collectionNode; @@ -61,7 +62,7 @@ - (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSizeForNodeAtIndexPath:(NSIndexPath *)indexPath { - ASEnvironmentDisplayTraits displayTraits = self.collectionNode.environmentState.displayTraits; + ASDisplayTraits *displayTraits = [self.collectionNode displayTraits]; if (displayTraits.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { return ASSizeRangeMake(CGSizeMake(200, 120), CGSizeMake(200, 120)); diff --git a/examples/DisplayTraits/Sample/KittenNode.m b/examples/DisplayTraits/Sample/KittenNode.m index dd8fbc4b96..8139292840 100644 --- a/examples/DisplayTraits/Sample/KittenNode.m +++ b/examples/DisplayTraits/Sample/KittenNode.m @@ -12,6 +12,8 @@ #import "KittenNode.h" #import "OverrideViewController.h" +#import + static const CGFloat kOuterPadding = 16.0f; static const CGFloat kInnerPadding = 10.0f; @@ -128,8 +130,7 @@ static const CGFloat kInnerPadding = 10.0f; - (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize { - - ASEnvironmentDisplayTraits displayTraits = self.environmentState.displayTraits; + ASDisplayTraits *displayTraits = [self displayTraits]; ASStackLayoutSpec *stackSpec = [[ASStackLayoutSpec alloc] init]; stackSpec.spacing = kInnerPadding; @@ -146,19 +147,15 @@ static const CGFloat kInnerPadding = 10.0f; return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(kOuterPadding, kOuterPadding, kOuterPadding, kOuterPadding) child:stackSpec]; } - + (void)defaultImageTappedAction:(ASViewController *)sourceViewController { OverrideViewController *overrideVC = [[OverrideViewController alloc] init]; overrideVC.overrideDisplayTraitsWithTraitCollection = ^(UITraitCollection *traitCollection) { - return (ASEnvironmentDisplayTraits) { - .displayScale = traitCollection.displayScale, - .horizontalSizeClass = UIUserInterfaceSizeClassCompact, - .userInterfaceIdiom = traitCollection.userInterfaceIdiom, - .verticalSizeClass = UIUserInterfaceSizeClassCompact, - .forceTouchCapability = traitCollection.forceTouchCapability, - }; + ASDisplayTraits *displayTraits = [ASDisplayTraits displayTraitsWithUITraitCollection:traitCollection]; + displayTraits.horizontalSizeClass = UIUserInterfaceSizeClassCompact; + displayTraits.verticalSizeClass = UIUserInterfaceSizeClassCompact; + return displayTraits; }; [sourceViewController presentViewController:overrideVC animated:YES completion:nil]; diff --git a/examples/DisplayTraits/Sample/OverrideViewController.m b/examples/DisplayTraits/Sample/OverrideViewController.m index b0024b38e7..6a99e76a53 100644 --- a/examples/DisplayTraits/Sample/OverrideViewController.m +++ b/examples/DisplayTraits/Sample/OverrideViewController.m @@ -10,6 +10,8 @@ */ #import "OverrideViewController.h" +#import + static NSString *kLinkAttributeName = @"PlaceKittenNodeLinkAttributeName"; @interface OverrideNode() @@ -42,7 +44,7 @@ static NSString *kLinkAttributeName = @"PlaceKittenNodeLinkAttributeName"; - (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize { CGFloat pointSize = 16.f; - ASEnvironmentDisplayTraits displayTraits = self.environmentState.displayTraits; + ASDisplayTraits *displayTraits = [self displayTraits]; if (displayTraits.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { // This should never happen because we override the VC's display traits to always be compact. pointSize = 100;