added nsobject based ASDisplayTraits class

This commit is contained in:
rcancro
2016-05-04 10:37:06 -07:00
parent 35820e58a0
commit f828d079fa
13 changed files with 198 additions and 30 deletions

View File

@@ -324,6 +324,10 @@
9C55866C1BD54A3000B50E3A /* ASAsciiArtBoxCreator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C5586671BD549CB00B50E3A /* ASAsciiArtBoxCreator.h */; settings = {ATTRIBUTES = (Public, ); }; }; 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, ); }; }; 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, ); }; }; 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 */; }; 9C8221951BA237B80037F19A /* ASStackBaselinePositionedLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8221931BA237B80037F19A /* ASStackBaselinePositionedLayout.h */; };
9C8221961BA237B80037F19A /* 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 */; }; 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 = "<group>"; }; 9C5586671BD549CB00B50E3A /* ASAsciiArtBoxCreator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASAsciiArtBoxCreator.h; path = AsyncDisplayKit/Layout/ASAsciiArtBoxCreator.h; sourceTree = "<group>"; };
9C5586681BD549CB00B50E3A /* ASAsciiArtBoxCreator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASAsciiArtBoxCreator.m; path = AsyncDisplayKit/Layout/ASAsciiArtBoxCreator.m; sourceTree = "<group>"; }; 9C5586681BD549CB00B50E3A /* ASAsciiArtBoxCreator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASAsciiArtBoxCreator.m; path = AsyncDisplayKit/Layout/ASAsciiArtBoxCreator.m; sourceTree = "<group>"; };
9C6BB3B01B8CC9C200F13F52 /* ASStaticLayoutable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASStaticLayoutable.h; path = AsyncDisplayKit/Layout/ASStaticLayoutable.h; sourceTree = "<group>"; }; 9C6BB3B01B8CC9C200F13F52 /* ASStaticLayoutable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASStaticLayoutable.h; path = AsyncDisplayKit/Layout/ASStaticLayoutable.h; sourceTree = "<group>"; };
9C70F2011CDA4EFA007D6C76 /* ASDisplayTraits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASDisplayTraits.h; sourceTree = "<group>"; };
9C70F2021CDA4EFA007D6C76 /* ASDisplayTraits.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASDisplayTraits.m; sourceTree = "<group>"; };
9C8221931BA237B80037F19A /* ASStackBaselinePositionedLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASStackBaselinePositionedLayout.h; sourceTree = "<group>"; }; 9C8221931BA237B80037F19A /* ASStackBaselinePositionedLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASStackBaselinePositionedLayout.h; sourceTree = "<group>"; };
9C8221941BA237B80037F19A /* ASStackBaselinePositionedLayout.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASStackBaselinePositionedLayout.mm; sourceTree = "<group>"; }; 9C8221941BA237B80037F19A /* ASStackBaselinePositionedLayout.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASStackBaselinePositionedLayout.mm; sourceTree = "<group>"; };
9C8898BA1C738B9800D6B02E /* ASTextKitFontSizeAdjuster.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ASTextKitFontSizeAdjuster.mm; path = TextKit/ASTextKitFontSizeAdjuster.mm; sourceTree = "<group>"; }; 9C8898BA1C738B9800D6B02E /* ASTextKitFontSizeAdjuster.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ASTextKitFontSizeAdjuster.mm; path = TextKit/ASTextKitFontSizeAdjuster.mm; sourceTree = "<group>"; };
@@ -1223,6 +1229,8 @@
205F0E0D1B371875007741D0 /* UICollectionViewLayout+ASConvenience.h */, 205F0E0D1B371875007741D0 /* UICollectionViewLayout+ASConvenience.h */,
205F0E0E1B371875007741D0 /* UICollectionViewLayout+ASConvenience.m */, 205F0E0E1B371875007741D0 /* UICollectionViewLayout+ASConvenience.m */,
058D09FF195D050800B7D73C /* UIView+ASConvenience.h */, 058D09FF195D050800B7D73C /* UIView+ASConvenience.h */,
9C70F2011CDA4EFA007D6C76 /* ASDisplayTraits.h */,
9C70F2021CDA4EFA007D6C76 /* ASDisplayTraits.m */,
); );
path = Details; path = Details;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -1520,6 +1528,7 @@
257754A81BEE44CD00737CA5 /* ASTextKitContext.h in Headers */, 257754A81BEE44CD00737CA5 /* ASTextKitContext.h in Headers */,
DB55C2611C6408D6004EDCF5 /* _ASTransitionContext.h in Headers */, DB55C2611C6408D6004EDCF5 /* _ASTransitionContext.h in Headers */,
464052221A3F83C40061C0BA /* ASFlowLayoutController.h in Headers */, 464052221A3F83C40061C0BA /* ASFlowLayoutController.h in Headers */,
9C70F2031CDA4EFA007D6C76 /* ASDisplayTraits.h in Headers */,
257754AF1BEE44CD00737CA5 /* ASTextKitRenderer+TextChecking.h in Headers */, 257754AF1BEE44CD00737CA5 /* ASTextKitRenderer+TextChecking.h in Headers */,
058D0A57195D05DC00B7D73C /* ASHighlightOverlayLayer.h in Headers */, 058D0A57195D05DC00B7D73C /* ASHighlightOverlayLayer.h in Headers */,
058D0A7C195D05F900B7D73C /* ASImageNode+CGExtras.h in Headers */, 058D0A7C195D05F900B7D73C /* ASImageNode+CGExtras.h in Headers */,
@@ -1656,6 +1665,7 @@
34EFC75B1B701BAF00AD841F /* ASDimension.h in Headers */, 34EFC75B1B701BAF00AD841F /* ASDimension.h in Headers */,
A37320101C571B740011FC94 /* ASTextNode+Beta.h in Headers */, A37320101C571B740011FC94 /* ASTextNode+Beta.h in Headers */,
DBABFAFC1C6A8D2F0039EA4A /* _ASTransitionContext.h in Headers */, DBABFAFC1C6A8D2F0039EA4A /* _ASTransitionContext.h in Headers */,
9C70F2061CDA4F0C007D6C76 /* ASDisplayTraits.h in Headers */,
254C6B801BF94DF4003EC431 /* ASEqualityHashHelpers.h in Headers */, 254C6B801BF94DF4003EC431 /* ASEqualityHashHelpers.h in Headers */,
B350624F1B010EFD0018CF92 /* ASDisplayNode+DebugTiming.h in Headers */, B350624F1B010EFD0018CF92 /* ASDisplayNode+DebugTiming.h in Headers */,
B35061FD1B010EFD0018CF92 /* ASDisplayNode+Subclasses.h in Headers */, B35061FD1B010EFD0018CF92 /* ASDisplayNode+Subclasses.h in Headers */,
@@ -2043,6 +2053,7 @@
ACF6ED521B17847A00DA7C62 /* ASStackUnpositionedLayout.mm in Sources */, ACF6ED521B17847A00DA7C62 /* ASStackUnpositionedLayout.mm in Sources */,
257754A61BEE44CD00737CA5 /* ASTextKitAttributes.mm in Sources */, 257754A61BEE44CD00737CA5 /* ASTextKitAttributes.mm in Sources */,
81EE38501C8E94F000456208 /* ASRunLoopQueue.mm in Sources */, 81EE38501C8E94F000456208 /* ASRunLoopQueue.mm in Sources */,
9C70F2041CDA4EFA007D6C76 /* ASDisplayTraits.m in Sources */,
92074A691CC8BADA00918F75 /* ASControlNode+tvOS.m in Sources */, 92074A691CC8BADA00918F75 /* ASControlNode+tvOS.m in Sources */,
ACF6ED321B17843500DA7C62 /* ASStaticLayoutSpec.mm in Sources */, ACF6ED321B17843500DA7C62 /* ASStaticLayoutSpec.mm in Sources */,
AC026B6B1BD57D6F00BBC17E /* ASChangeSetDataController.m in Sources */, AC026B6B1BD57D6F00BBC17E /* ASChangeSetDataController.m in Sources */,
@@ -2193,6 +2204,7 @@
34EFC7721B701D0300AD841F /* ASStackLayoutSpec.mm in Sources */, 34EFC7721B701D0300AD841F /* ASStackLayoutSpec.mm in Sources */,
34EFC7761B701D2A00AD841F /* ASStackPositionedLayout.mm in Sources */, 34EFC7761B701D2A00AD841F /* ASStackPositionedLayout.mm in Sources */,
7AB338661C55B3420055FDE8 /* ASRelativeLayoutSpec.mm in Sources */, 7AB338661C55B3420055FDE8 /* ASRelativeLayoutSpec.mm in Sources */,
9C70F2051CDA4F06007D6C76 /* ASDisplayTraits.m in Sources */,
34EFC7781B701D3100AD841F /* ASStackUnpositionedLayout.mm in Sources */, 34EFC7781B701D3100AD841F /* ASStackUnpositionedLayout.mm in Sources */,
DE84918E1C8FFF9F003D89E9 /* ASRunLoopQueue.mm in Sources */, DE84918E1C8FFF9F003D89E9 /* ASRunLoopQueue.mm in Sources */,
AC026B6C1BD57D6F00BBC17E /* ASChangeSetDataController.m in Sources */, AC026B6C1BD57D6F00BBC17E /* ASChangeSetDataController.m in Sources */,

View File

@@ -22,6 +22,7 @@
#import "_ASCoreAnimationExtras.h" #import "_ASCoreAnimationExtras.h"
#import "ASDisplayNodeLayoutContext.h" #import "ASDisplayNodeLayoutContext.h"
#import "ASDisplayNodeExtras.h" #import "ASDisplayNodeExtras.h"
#import "ASDisplayTraits.h"
#import "ASEqualityHelpers.h" #import "ASEqualityHelpers.h"
#import "ASRunLoopQueue.h" #import "ASRunLoopQueue.h"
#import "ASEnvironmentInternal.h" #import "ASEnvironmentInternal.h"
@@ -2720,6 +2721,11 @@ static const char *ASDisplayNodeDrawingPriorityKey = "ASDrawingPriority";
ASEnvironmentLayoutOptionsForwarding ASEnvironmentLayoutOptionsForwarding
ASEnvironmentLayoutExtensibilityForwarding ASEnvironmentLayoutExtensibilityForwarding
- (ASDisplayTraits *)displayTraits
{
ASDN::MutexLocker l(_propertyLock);
return [ASDisplayTraits displayTraitsWithASEnvironmentDisplayTraits:_environmentState.displayTraits];
}
#if TARGET_OS_TV #if TARGET_OS_TV
#pragma mark - UIFocusEnvironment Protocol (tvOS) #pragma mark - UIFocusEnvironment Protocol (tvOS)

View File

@@ -9,10 +9,12 @@
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
#import <AsyncDisplayKit/ASDisplayNode.h> #import <AsyncDisplayKit/ASDisplayNode.h>
@class ASDisplayTraits;
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
typedef ASEnvironmentDisplayTraits (^ASEnvironmentDisplayTraitsForTraitCollectionBlock)(UITraitCollection *traitCollection); typedef ASDisplayTraits * _Nonnull (^ASDisplayTraitsForTraitCollectionBlock)(UITraitCollection *traitCollection);
typedef ASEnvironmentDisplayTraits (^ASEnvironmentDisplayTraitsForTraitWindowSizeBlock)(CGSize windowSize); typedef ASDisplayTraits * _Nonnull (^ASDisplayTraitsForTraitWindowSizeBlock)(CGSize windowSize);
@interface ASViewController<__covariant DisplayNodeType : ASDisplayNode *> : UIViewController @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. * 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. * 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. * @abstract Passthrough property to the the .interfaceState of the node.

View File

@@ -11,6 +11,7 @@
#import "ASDimension.h" #import "ASDimension.h"
#import "ASDisplayNode+FrameworkPrivate.h" #import "ASDisplayNode+FrameworkPrivate.h"
#import "ASDisplayNode+Beta.h" #import "ASDisplayNode+Beta.h"
#import "ASDisplayTraits.h"
#import "ASEnvironmentInternal.h" #import "ASEnvironmentInternal.h"
#import "ASRangeControllerUpdateRangeProtocol+Beta.h" #import "ASRangeControllerUpdateRangeProtocol+Beta.h"
@@ -146,7 +147,9 @@
- (ASEnvironmentDisplayTraits)displayTraitsForTraitCollection:(UITraitCollection *)traitCollection - (ASEnvironmentDisplayTraits)displayTraitsForTraitCollection:(UITraitCollection *)traitCollection
{ {
if (self.overrideDisplayTraitsWithTraitCollection) { if (self.overrideDisplayTraitsWithTraitCollection) {
return self.overrideDisplayTraitsWithTraitCollection(traitCollection); ASDisplayTraits *displayTraits = self.overrideDisplayTraitsWithTraitCollection(traitCollection);
displayTraits.isMutable = NO;
return [displayTraits environmentDisplayTraits];
} }
ASEnvironmentDisplayTraits displayTraits = ASEnvironmentDisplayTraitsFromUITraitCollection(traitCollection); ASEnvironmentDisplayTraits displayTraits = ASEnvironmentDisplayTraitsFromUITraitCollection(traitCollection);
@@ -157,7 +160,9 @@
- (ASEnvironmentDisplayTraits)displayTraitsForWindowSize:(CGSize)windowSize - (ASEnvironmentDisplayTraits)displayTraitsForWindowSize:(CGSize)windowSize
{ {
if (self.overrideDisplayTraitsWithWindowSize) { if (self.overrideDisplayTraitsWithWindowSize) {
return self.overrideDisplayTraitsWithWindowSize(windowSize); ASDisplayTraits *displayTraits = self.overrideDisplayTraitsWithWindowSize(windowSize);
displayTraits.isMutable = NO;
return [displayTraits environmentDisplayTraits];
} }
return self.node.environmentState.displayTraits; return self.node.environmentState.displayTraits;
} }

View File

@@ -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 <UIKit/UIKit.h>
#import <AsyncDisplayKit/ASEnvironment.h>
@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

View File

@@ -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 <AsyncDisplayKit/ASAssert.h>
#import <AsyncDisplayKit/ASAvailability.h>
@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

View File

@@ -76,15 +76,14 @@ typedef struct ASEnvironmentDisplayTraits {
// sure that it is valid. // sure that it is valid.
// //
// Use displayContext when you wish to pass view context specific data along with the // 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 // 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 // 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 // be dealloced but any subnodes that are hanging around (why would they be?) will now
// have a displayContext that points to a bad pointer. // 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. // which will propagate a nil displayContext to its subnodes.
//__unsafe_unretained id displayContext;
id __unsafe_unretained displayContext; id __unsafe_unretained displayContext;
} ASEnvironmentDisplayTraits; } ASEnvironmentDisplayTraits;
@@ -104,7 +103,7 @@ extern ASEnvironmentState ASEnvironmentStateMakeDefault();
ASDISPLAYNODE_EXTERN_C_END ASDISPLAYNODE_EXTERN_C_END
@class ASTraitCollection; @class ASDisplayTraits;
#pragma mark - ASEnvironment #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 /// Classes should implement this method and return YES / NO dependent if downware propagation is enabled or not
- (BOOL)supportsTraitsCollectionPropagation; - (BOOL)supportsTraitsCollectionPropagation;
/// Returns an NSObject-representation of the environment's ASEnvironmentDisplayTraits
- (ASDisplayTraits *)displayTraits;
@end @end
// ASCollection/TableNodes don't actually have ASCellNodes as subnodes. Because of this we can't rely on display trait // ASCollection/TableNodes don't actually have ASCellNodes as subnodes. Because of this we can't rely on display trait

View File

@@ -10,6 +10,7 @@
#import "ASEnvironment.h" #import "ASEnvironment.h"
#import "ASEnvironmentInternal.h" #import "ASEnvironmentInternal.h"
#import <AsyncDisplayKit/ASAvailability.h>
ASEnvironmentLayoutOptionsState _ASEnvironmentLayoutOptionsStateMakeDefault() ASEnvironmentLayoutOptionsState _ASEnvironmentLayoutOptionsStateMakeDefault()
{ {
@@ -46,14 +47,18 @@ ASEnvironmentDisplayTraits _ASEnvironmentDisplayTraitsMakeDefault()
} }
ASEnvironmentDisplayTraits ASEnvironmentDisplayTraitsFromUITraitCollection(UITraitCollection *traitCollection) ASEnvironmentDisplayTraits ASEnvironmentDisplayTraitsFromUITraitCollection(UITraitCollection *traitCollection)
{ {
return (ASEnvironmentDisplayTraits) { ASEnvironmentDisplayTraits displayTraits;
.displayScale = traitCollection.displayScale, if (AS_AT_LEAST_IOS8) {
.horizontalSizeClass = traitCollection.horizontalSizeClass, displayTraits.displayScale = traitCollection.displayScale;
.userInterfaceIdiom = traitCollection.userInterfaceIdiom, displayTraits.horizontalSizeClass = traitCollection.horizontalSizeClass;
.verticalSizeClass = traitCollection.verticalSizeClass, displayTraits.verticalSizeClass = traitCollection.verticalSizeClass;
.forceTouchCapability = traitCollection.forceTouchCapability, displayTraits.userInterfaceIdiom = traitCollection.userInterfaceIdiom;
}; if (AS_AT_LEAST_IOS9) {
displayTraits.forceTouchCapability = traitCollection.forceTouchCapability;
}
}
return displayTraits;
} }
BOOL ASEnvironmentDisplayTraitsIsEqualToASEnvironmentDisplayTraits(ASEnvironmentDisplayTraits displayTraits0, ASEnvironmentDisplayTraits displayTraits1) BOOL ASEnvironmentDisplayTraitsIsEqualToASEnvironmentDisplayTraits(ASEnvironmentDisplayTraits displayTraits0, ASEnvironmentDisplayTraits displayTraits1)

View File

@@ -12,6 +12,7 @@
#import "ASAssert.h" #import "ASAssert.h"
#import "ASBaseDefines.h" #import "ASBaseDefines.h"
#import "ASDisplayTraits.h"
#import "ASEnvironmentInternal.h" #import "ASEnvironmentInternal.h"
#import "ASInternalHelpers.h" #import "ASInternalHelpers.h"
@@ -203,6 +204,12 @@
ASEnvironmentLayoutOptionsForwarding ASEnvironmentLayoutOptionsForwarding
ASEnvironmentLayoutExtensibilityForwarding ASEnvironmentLayoutExtensibilityForwarding
- (ASDisplayTraits *)displayTraits
{
ASDN::MutexLocker l(_propertyLock);
return [ASDisplayTraits displayTraitsWithASEnvironmentDisplayTraits:_environmentState.displayTraits];
}
@end @end
@implementation ASLayoutSpec (Debugging) @implementation ASLayoutSpec (Debugging)

View File

@@ -23,6 +23,10 @@
#define kCFCoreFoundationVersionNumber_iOS_8_0 1140.1 #define kCFCoreFoundationVersionNumber_iOS_8_0 1140.1
#endif #endif
#ifndef kCFCoreFoundationVersionNumber_iOS_8_4
#define kCFCoreFoundationVersionNumber_iOS_8_4 1145.15
#endif
#ifndef __IPHONE_7_0 #ifndef __IPHONE_7_0
#define __IPHONE_7_0 70000 #define __IPHONE_7_0 70000
#endif #endif
@@ -31,6 +35,10 @@
#define __IPHONE_8_0 80000 #define __IPHONE_8_0 80000
#endif #endif
#ifndef __IPHONE_9_0
#define __IPHONE_9_0 90000
#endif
#ifndef AS_IOS8_SDK_OR_LATER #ifndef AS_IOS8_SDK_OR_LATER
#define AS_IOS8_SDK_OR_LATER __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0 #define AS_IOS8_SDK_OR_LATER __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
#endif #endif
@@ -38,3 +46,4 @@
#define AS_AT_LEAST_IOS7 (kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iOS_6_1) #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_IOS7_1 (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_1)
#define AS_AT_LEAST_IOS8 (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) #define AS_AT_LEAST_IOS8 (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0)
#define AS_AT_LEAST_IOS9 (kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iOS_8_4)

View File

@@ -11,6 +11,7 @@
#import "CollectionViewController.h" #import "CollectionViewController.h"
#import "KittenNode.h" #import "KittenNode.h"
#import <AsyncDisplayKit/ASDisplayTraits.h>
@interface CollectionViewController () <ASCollectionDelegate, ASCollectionDataSource> @interface CollectionViewController () <ASCollectionDelegate, ASCollectionDataSource>
@property (nonatomic, strong) ASCollectionNode *collectionNode; @property (nonatomic, strong) ASCollectionNode *collectionNode;
@@ -61,7 +62,7 @@
- (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSizeForNodeAtIndexPath:(NSIndexPath *)indexPath - (ASSizeRange)collectionView:(ASCollectionView *)collectionView constrainedSizeForNodeAtIndexPath:(NSIndexPath *)indexPath
{ {
ASEnvironmentDisplayTraits displayTraits = self.collectionNode.environmentState.displayTraits; ASDisplayTraits *displayTraits = [self.collectionNode displayTraits];
if (displayTraits.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { if (displayTraits.horizontalSizeClass == UIUserInterfaceSizeClassRegular) {
return ASSizeRangeMake(CGSizeMake(200, 120), CGSizeMake(200, 120)); return ASSizeRangeMake(CGSizeMake(200, 120), CGSizeMake(200, 120));

View File

@@ -12,6 +12,8 @@
#import "KittenNode.h" #import "KittenNode.h"
#import "OverrideViewController.h" #import "OverrideViewController.h"
#import <AsyncDisplayKit/ASDisplayTraits.h>
static const CGFloat kOuterPadding = 16.0f; static const CGFloat kOuterPadding = 16.0f;
static const CGFloat kInnerPadding = 10.0f; static const CGFloat kInnerPadding = 10.0f;
@@ -128,8 +130,7 @@ static const CGFloat kInnerPadding = 10.0f;
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize - (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
{ {
ASDisplayTraits *displayTraits = [self displayTraits];
ASEnvironmentDisplayTraits displayTraits = self.environmentState.displayTraits;
ASStackLayoutSpec *stackSpec = [[ASStackLayoutSpec alloc] init]; ASStackLayoutSpec *stackSpec = [[ASStackLayoutSpec alloc] init];
stackSpec.spacing = kInnerPadding; stackSpec.spacing = kInnerPadding;
@@ -146,19 +147,15 @@ static const CGFloat kInnerPadding = 10.0f;
return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(kOuterPadding, kOuterPadding, kOuterPadding, kOuterPadding) child:stackSpec]; return [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(kOuterPadding, kOuterPadding, kOuterPadding, kOuterPadding) child:stackSpec];
} }
+ (void)defaultImageTappedAction:(ASViewController *)sourceViewController + (void)defaultImageTappedAction:(ASViewController *)sourceViewController
{ {
OverrideViewController *overrideVC = [[OverrideViewController alloc] init]; OverrideViewController *overrideVC = [[OverrideViewController alloc] init];
overrideVC.overrideDisplayTraitsWithTraitCollection = ^(UITraitCollection *traitCollection) { overrideVC.overrideDisplayTraitsWithTraitCollection = ^(UITraitCollection *traitCollection) {
return (ASEnvironmentDisplayTraits) { ASDisplayTraits *displayTraits = [ASDisplayTraits displayTraitsWithUITraitCollection:traitCollection];
.displayScale = traitCollection.displayScale, displayTraits.horizontalSizeClass = UIUserInterfaceSizeClassCompact;
.horizontalSizeClass = UIUserInterfaceSizeClassCompact, displayTraits.verticalSizeClass = UIUserInterfaceSizeClassCompact;
.userInterfaceIdiom = traitCollection.userInterfaceIdiom, return displayTraits;
.verticalSizeClass = UIUserInterfaceSizeClassCompact,
.forceTouchCapability = traitCollection.forceTouchCapability,
};
}; };
[sourceViewController presentViewController:overrideVC animated:YES completion:nil]; [sourceViewController presentViewController:overrideVC animated:YES completion:nil];

View File

@@ -10,6 +10,8 @@
*/ */
#import "OverrideViewController.h" #import "OverrideViewController.h"
#import <AsyncDisplayKit/ASDisplayTraits.h>
static NSString *kLinkAttributeName = @"PlaceKittenNodeLinkAttributeName"; static NSString *kLinkAttributeName = @"PlaceKittenNodeLinkAttributeName";
@interface OverrideNode() @interface OverrideNode()
@@ -42,7 +44,7 @@ static NSString *kLinkAttributeName = @"PlaceKittenNodeLinkAttributeName";
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize - (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
{ {
CGFloat pointSize = 16.f; CGFloat pointSize = 16.f;
ASEnvironmentDisplayTraits displayTraits = self.environmentState.displayTraits; ASDisplayTraits *displayTraits = [self displayTraits];
if (displayTraits.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { if (displayTraits.horizontalSizeClass == UIUserInterfaceSizeClassRegular) {
// This should never happen because we override the VC's display traits to always be compact. // This should never happen because we override the VC's display traits to always be compact.
pointSize = 100; pointSize = 100;