[Layout] Improve ASDimensionMake via NSString (#2351)

* Improve ASDimensionMake via NSString

- ASXCTAssertEqualDimensions
- Add support for "auto"
- Assert if given an empty or invalid string

* Address comments

* Add ASCGFloatFromString and ASCGFloatFromNumber

* Rename CGRect+ASConvenience to CoreGraphics+ASConvenience
This commit is contained in:
Michael Schneider
2016-10-06 16:29:33 -07:00
committed by GitHub
parent 166414dfc9
commit 6f2c7caac3
13 changed files with 66 additions and 49 deletions

View File

@@ -74,7 +74,7 @@
205F0E121B371BD7007741D0 /* ASScrollDirection.m in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E111B371BD7007741D0 /* ASScrollDirection.m */; }; 205F0E121B371BD7007741D0 /* ASScrollDirection.m in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E111B371BD7007741D0 /* ASScrollDirection.m */; };
205F0E1A1B37339C007741D0 /* ASAbstractLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E181B37339C007741D0 /* ASAbstractLayoutController.mm */; }; 205F0E1A1B37339C007741D0 /* ASAbstractLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E181B37339C007741D0 /* ASAbstractLayoutController.mm */; };
205F0E1E1B373A2C007741D0 /* ASCollectionViewLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E1C1B373A2C007741D0 /* ASCollectionViewLayoutController.mm */; }; 205F0E1E1B373A2C007741D0 /* ASCollectionViewLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E1C1B373A2C007741D0 /* ASCollectionViewLayoutController.mm */; };
205F0E221B376416007741D0 /* CGRect+ASConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E201B376416007741D0 /* CGRect+ASConvenience.m */; }; 205F0E221B376416007741D0 /* CoreGraphics+ASConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E201B376416007741D0 /* CoreGraphics+ASConvenience.m */; };
242995D31B29743C00090100 /* ASBasicImageDownloaderTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 242995D21B29743C00090100 /* ASBasicImageDownloaderTests.m */; }; 242995D31B29743C00090100 /* ASBasicImageDownloaderTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 242995D21B29743C00090100 /* ASBasicImageDownloaderTests.m */; };
251B8EF81BBB3D690087C538 /* ASCollectionDataController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 251B8EF31BBB3D690087C538 /* ASCollectionDataController.mm */; }; 251B8EF81BBB3D690087C538 /* ASCollectionDataController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 251B8EF31BBB3D690087C538 /* ASCollectionDataController.mm */; };
251B8EFA1BBB3D690087C538 /* ASCollectionViewFlowLayoutInspector.m in Sources */ = {isa = PBXBuildFile; fileRef = 251B8EF51BBB3D690087C538 /* ASCollectionViewFlowLayoutInspector.m */; }; 251B8EFA1BBB3D690087C538 /* ASCollectionViewFlowLayoutInspector.m in Sources */ = {isa = PBXBuildFile; fileRef = 251B8EF51BBB3D690087C538 /* ASCollectionViewFlowLayoutInspector.m */; };
@@ -166,8 +166,8 @@
509E68621B3AEDA5009B9150 /* ASAbstractLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E181B37339C007741D0 /* ASAbstractLayoutController.mm */; }; 509E68621B3AEDA5009B9150 /* ASAbstractLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E181B37339C007741D0 /* ASAbstractLayoutController.mm */; };
509E68631B3AEDB4009B9150 /* ASCollectionViewLayoutController.h in Headers */ = {isa = PBXBuildFile; fileRef = 205F0E1B1B373A2C007741D0 /* ASCollectionViewLayoutController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 509E68631B3AEDB4009B9150 /* ASCollectionViewLayoutController.h in Headers */ = {isa = PBXBuildFile; fileRef = 205F0E1B1B373A2C007741D0 /* ASCollectionViewLayoutController.h */; settings = {ATTRIBUTES = (Public, ); }; };
509E68641B3AEDB7009B9150 /* ASCollectionViewLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E1C1B373A2C007741D0 /* ASCollectionViewLayoutController.mm */; }; 509E68641B3AEDB7009B9150 /* ASCollectionViewLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E1C1B373A2C007741D0 /* ASCollectionViewLayoutController.mm */; };
509E68651B3AEDC5009B9150 /* CGRect+ASConvenience.h in Headers */ = {isa = PBXBuildFile; fileRef = 205F0E1F1B376416007741D0 /* CGRect+ASConvenience.h */; settings = {ATTRIBUTES = (Public, ); }; }; 509E68651B3AEDC5009B9150 /* CoreGraphics+ASConvenience.h in Headers */ = {isa = PBXBuildFile; fileRef = 205F0E1F1B376416007741D0 /* CoreGraphics+ASConvenience.h */; settings = {ATTRIBUTES = (Public, ); }; };
509E68661B3AEDD7009B9150 /* CGRect+ASConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E201B376416007741D0 /* CGRect+ASConvenience.m */; }; 509E68661B3AEDD7009B9150 /* CoreGraphics+ASConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E201B376416007741D0 /* CoreGraphics+ASConvenience.m */; };
636EA1A41C7FF4EC00EE152F /* NSArray+Diffing.m in Sources */ = {isa = PBXBuildFile; fileRef = DBC452DA1C5BF64600B16017 /* NSArray+Diffing.m */; }; 636EA1A41C7FF4EC00EE152F /* NSArray+Diffing.m in Sources */ = {isa = PBXBuildFile; fileRef = DBC452DA1C5BF64600B16017 /* NSArray+Diffing.m */; };
636EA1A51C7FF4EF00EE152F /* ASDefaultPlayButton.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB7B0191C5962EA00662EF4 /* ASDefaultPlayButton.m */; }; 636EA1A51C7FF4EF00EE152F /* ASDefaultPlayButton.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB7B0191C5962EA00662EF4 /* ASDefaultPlayButton.m */; };
680346941CE4052A0009FEB4 /* ASNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 68FC85DC1CE29AB700EDD713 /* ASNavigationController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 680346941CE4052A0009FEB4 /* ASNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 68FC85DC1CE29AB700EDD713 /* ASNavigationController.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -541,7 +541,7 @@
F7CE6C4C1D2CDB3E00BE4C15 /* ASRunLoopQueue.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 81EE384D1C8E94F000456208 /* ASRunLoopQueue.h */; }; F7CE6C4C1D2CDB3E00BE4C15 /* ASRunLoopQueue.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 81EE384D1C8E94F000456208 /* ASRunLoopQueue.h */; };
F7CE6C4D1D2CDB3E00BE4C15 /* ASScrollDirection.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 296A0A311A951715005ACEAA /* ASScrollDirection.h */; }; F7CE6C4D1D2CDB3E00BE4C15 /* ASScrollDirection.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 296A0A311A951715005ACEAA /* ASScrollDirection.h */; };
F7CE6C4E1D2CDB3E00BE4C15 /* ASThread.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 058D0A12195D050800B7D73C /* ASThread.h */; }; F7CE6C4E1D2CDB3E00BE4C15 /* ASThread.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 058D0A12195D050800B7D73C /* ASThread.h */; };
F7CE6C4F1D2CDB3E00BE4C15 /* CGRect+ASConvenience.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 205F0E1F1B376416007741D0 /* CGRect+ASConvenience.h */; }; F7CE6C4F1D2CDB3E00BE4C15 /* CoreGraphics+ASConvenience.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 205F0E1F1B376416007741D0 /* CoreGraphics+ASConvenience.h */; };
F7CE6C501D2CDB3E00BE4C15 /* ASDataController.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 464052191A3F83C40061C0BA /* ASDataController.h */; }; F7CE6C501D2CDB3E00BE4C15 /* ASDataController.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 464052191A3F83C40061C0BA /* ASDataController.h */; };
F7CE6C511D2CDB3E00BE4C15 /* ASChangeSetDataController.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = AC026B671BD57D6F00BBC17E /* ASChangeSetDataController.h */; }; F7CE6C511D2CDB3E00BE4C15 /* ASChangeSetDataController.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = AC026B671BD57D6F00BBC17E /* ASChangeSetDataController.h */; };
F7CE6C521D2CDB3E00BE4C15 /* ASIndexedNodeContext.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = E5711A2A1C840C81009619D4 /* ASIndexedNodeContext.h */; }; F7CE6C521D2CDB3E00BE4C15 /* ASIndexedNodeContext.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = E5711A2A1C840C81009619D4 /* ASIndexedNodeContext.h */; };
@@ -714,7 +714,7 @@
F7CE6C4C1D2CDB3E00BE4C15 /* ASRunLoopQueue.h in CopyFiles */, F7CE6C4C1D2CDB3E00BE4C15 /* ASRunLoopQueue.h in CopyFiles */,
F7CE6C4D1D2CDB3E00BE4C15 /* ASScrollDirection.h in CopyFiles */, F7CE6C4D1D2CDB3E00BE4C15 /* ASScrollDirection.h in CopyFiles */,
F7CE6C4E1D2CDB3E00BE4C15 /* ASThread.h in CopyFiles */, F7CE6C4E1D2CDB3E00BE4C15 /* ASThread.h in CopyFiles */,
F7CE6C4F1D2CDB3E00BE4C15 /* CGRect+ASConvenience.h in CopyFiles */, F7CE6C4F1D2CDB3E00BE4C15 /* CoreGraphics+ASConvenience.h in CopyFiles */,
F7CE6C501D2CDB3E00BE4C15 /* ASDataController.h in CopyFiles */, F7CE6C501D2CDB3E00BE4C15 /* ASDataController.h in CopyFiles */,
F7CE6C511D2CDB3E00BE4C15 /* ASChangeSetDataController.h in CopyFiles */, F7CE6C511D2CDB3E00BE4C15 /* ASChangeSetDataController.h in CopyFiles */,
F7CE6C521D2CDB3E00BE4C15 /* ASIndexedNodeContext.h in CopyFiles */, F7CE6C521D2CDB3E00BE4C15 /* ASIndexedNodeContext.h in CopyFiles */,
@@ -905,8 +905,8 @@
205F0E181B37339C007741D0 /* ASAbstractLayoutController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASAbstractLayoutController.mm; sourceTree = "<group>"; }; 205F0E181B37339C007741D0 /* ASAbstractLayoutController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASAbstractLayoutController.mm; sourceTree = "<group>"; };
205F0E1B1B373A2C007741D0 /* ASCollectionViewLayoutController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCollectionViewLayoutController.h; sourceTree = "<group>"; }; 205F0E1B1B373A2C007741D0 /* ASCollectionViewLayoutController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCollectionViewLayoutController.h; sourceTree = "<group>"; };
205F0E1C1B373A2C007741D0 /* ASCollectionViewLayoutController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASCollectionViewLayoutController.mm; sourceTree = "<group>"; }; 205F0E1C1B373A2C007741D0 /* ASCollectionViewLayoutController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASCollectionViewLayoutController.mm; sourceTree = "<group>"; };
205F0E1F1B376416007741D0 /* CGRect+ASConvenience.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CGRect+ASConvenience.h"; sourceTree = "<group>"; }; 205F0E1F1B376416007741D0 /* CoreGraphics+ASConvenience.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CoreGraphics+ASConvenience.h"; sourceTree = "<group>"; };
205F0E201B376416007741D0 /* CGRect+ASConvenience.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CGRect+ASConvenience.m"; sourceTree = "<group>"; }; 205F0E201B376416007741D0 /* CoreGraphics+ASConvenience.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CoreGraphics+ASConvenience.m"; sourceTree = "<group>"; };
242995D21B29743C00090100 /* ASBasicImageDownloaderTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASBasicImageDownloaderTests.m; sourceTree = "<group>"; }; 242995D21B29743C00090100 /* ASBasicImageDownloaderTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASBasicImageDownloaderTests.m; sourceTree = "<group>"; };
251B8EF21BBB3D690087C538 /* ASCollectionDataController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = ASCollectionDataController.h; sourceTree = "<group>"; }; 251B8EF21BBB3D690087C538 /* ASCollectionDataController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = ASCollectionDataController.h; sourceTree = "<group>"; };
251B8EF31BBB3D690087C538 /* ASCollectionDataController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = ASCollectionDataController.mm; sourceTree = "<group>"; }; 251B8EF31BBB3D690087C538 /* ASCollectionDataController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = ASCollectionDataController.mm; sourceTree = "<group>"; };
@@ -1491,8 +1491,8 @@
9C70F2021CDA4EFA007D6C76 /* ASTraitCollection.m */, 9C70F2021CDA4EFA007D6C76 /* ASTraitCollection.m */,
68B8A4DF1CBDB958007E4543 /* ASWeakProxy.h */, 68B8A4DF1CBDB958007E4543 /* ASWeakProxy.h */,
68B8A4E01CBDB958007E4543 /* ASWeakProxy.m */, 68B8A4E01CBDB958007E4543 /* ASWeakProxy.m */,
205F0E1F1B376416007741D0 /* CGRect+ASConvenience.h */, 205F0E1F1B376416007741D0 /* CoreGraphics+ASConvenience.h */,
205F0E201B376416007741D0 /* CGRect+ASConvenience.m */, 205F0E201B376416007741D0 /* CoreGraphics+ASConvenience.m */,
25B171EA1C12242700508A7A /* Data Controller */, 25B171EA1C12242700508A7A /* Data Controller */,
CC4981BA1D1C7F65004E13CC /* NSIndexSet+ASHelpers.h */, CC4981BA1D1C7F65004E13CC /* NSIndexSet+ASHelpers.h */,
CC4981BB1D1C7F65004E13CC /* NSIndexSet+ASHelpers.m */, CC4981BB1D1C7F65004E13CC /* NSIndexSet+ASHelpers.m */,
@@ -1895,7 +1895,7 @@
B350620D1B010EFD0018CF92 /* ASTextNode.h in Headers */, B350620D1B010EFD0018CF92 /* ASTextNode.h in Headers */,
B35062391B010EFD0018CF92 /* ASThread.h in Headers */, B35062391B010EFD0018CF92 /* ASThread.h in Headers */,
2C107F5B1BA9F54500F13DE5 /* AsyncDisplayKit.h in Headers */, 2C107F5B1BA9F54500F13DE5 /* AsyncDisplayKit.h in Headers */,
509E68651B3AEDC5009B9150 /* CGRect+ASConvenience.h in Headers */, 509E68651B3AEDC5009B9150 /* CoreGraphics+ASConvenience.h in Headers */,
B350623A1B010EFD0018CF92 /* NSMutableAttributedString+TextKitAdditions.h in Headers */, B350623A1B010EFD0018CF92 /* NSMutableAttributedString+TextKitAdditions.h in Headers */,
044284FF1BAA3BD600D16268 /* UICollectionViewLayout+ASConvenience.h in Headers */, 044284FF1BAA3BD600D16268 /* UICollectionViewLayout+ASConvenience.h in Headers */,
B35062431B010EFD0018CF92 /* UIView+ASConvenience.h in Headers */, B35062431B010EFD0018CF92 /* UIView+ASConvenience.h in Headers */,
@@ -2224,7 +2224,7 @@
058D0A17195D050800B7D73C /* ASTextNode.mm in Sources */, 058D0A17195D050800B7D73C /* ASTextNode.mm in Sources */,
257754AC1BEE44CD00737CA5 /* ASTextKitRenderer.mm in Sources */, 257754AC1BEE44CD00737CA5 /* ASTextKitRenderer.mm in Sources */,
8BDA5FC61CDBDDE1007D13B2 /* ASVideoPlayerNode.mm in Sources */, 8BDA5FC61CDBDDE1007D13B2 /* ASVideoPlayerNode.mm in Sources */,
205F0E221B376416007741D0 /* CGRect+ASConvenience.m in Sources */, 205F0E221B376416007741D0 /* CoreGraphics+ASConvenience.m in Sources */,
257754B21BEE44CD00737CA5 /* ASTextKitShadower.mm in Sources */, 257754B21BEE44CD00737CA5 /* ASTextKitShadower.mm in Sources */,
9CFFC6BE1CCAC52B006A6476 /* ASEnvironment.mm in Sources */, 9CFFC6BE1CCAC52B006A6476 /* ASEnvironment.mm in Sources */,
697796601D8AC8D3007E93D7 /* ASLayoutSpec+Subclasses.mm in Sources */, 697796601D8AC8D3007E93D7 /* ASLayoutSpec+Subclasses.mm in Sources */,
@@ -2406,7 +2406,7 @@
B350620E1B010EFD0018CF92 /* ASTextNode.mm in Sources */, B350620E1B010EFD0018CF92 /* ASTextNode.mm in Sources */,
6959433F1D70815300B0EE1F /* ASDisplayNodeLayout.mm in Sources */, 6959433F1D70815300B0EE1F /* ASDisplayNodeLayout.mm in Sources */,
68355B3E1CB57A60001D4E68 /* ASPINRemoteImageDownloader.m in Sources */, 68355B3E1CB57A60001D4E68 /* ASPINRemoteImageDownloader.m in Sources */,
509E68661B3AEDD7009B9150 /* CGRect+ASConvenience.m in Sources */, 509E68661B3AEDD7009B9150 /* CoreGraphics+ASConvenience.m in Sources */,
254C6B871BF94F8A003EC431 /* ASTextKitEntityAttribute.m in Sources */, 254C6B871BF94F8A003EC431 /* ASTextKitEntityAttribute.m in Sources */,
34566CB31BC1213700715E6B /* ASPhotosFrameworkImageRequest.m in Sources */, 34566CB31BC1213700715E6B /* ASPhotosFrameworkImageRequest.m in Sources */,
254C6B831BF94F8A003EC431 /* ASTextKitCoreTextAdditions.m in Sources */, 254C6B831BF94F8A003EC431 /* ASTextKitCoreTextAdditions.m in Sources */,

View File

@@ -27,7 +27,7 @@
#import "ASInternalHelpers.h" #import "ASInternalHelpers.h"
#import "ASLayout.h" #import "ASLayout.h"
#import "CGRect+ASConvenience.h" #import "CoreGraphics+ASConvenience.h"
#import "ASObjectDescriptionHelpers.h" #import "ASObjectDescriptionHelpers.h"
/** /**

View File

@@ -17,7 +17,7 @@
#import "UIImage+ASConvenience.h" #import "UIImage+ASConvenience.h"
#import <AsyncDisplayKit/ASLayout.h> #import <AsyncDisplayKit/ASLayout.h>
#import <AsyncDisplayKit/ASDisplayNode+Subclasses.h> #import <AsyncDisplayKit/ASDisplayNode+Subclasses.h>
#import <AsyncDisplayKit/CGRect+ASConvenience.h> #import <AsyncDisplayKit/CoreGraphics+ASConvenience.h>
#import <AsyncDisplayKit/ASDisplayNodeExtras.h> #import <AsyncDisplayKit/ASDisplayNodeExtras.h>
#import <AsyncDisplayKit/ASTextNode.h> #import <AsyncDisplayKit/ASTextNode.h>
#import <AsyncDisplayKit/ASRangeController.h> #import <AsyncDisplayKit/ASRangeController.h>

View File

@@ -85,7 +85,7 @@
#import <AsyncDisplayKit/ASVisibilityProtocols.h> #import <AsyncDisplayKit/ASVisibilityProtocols.h>
#import <AsyncDisplayKit/ASWeakSet.h> #import <AsyncDisplayKit/ASWeakSet.h>
#import <AsyncDisplayKit/CGRect+ASConvenience.h> #import <AsyncDisplayKit/CoreGraphics+ASConvenience.h>
#import <AsyncDisplayKit/NSMutableAttributedString+TextKitAdditions.h> #import <AsyncDisplayKit/NSMutableAttributedString+TextKitAdditions.h>
#import <AsyncDisplayKit/UICollectionViewLayout+ASConvenience.h> #import <AsyncDisplayKit/UICollectionViewLayout+ASConvenience.h>
#import <AsyncDisplayKit/UIView+ASConvenience.h> #import <AsyncDisplayKit/UIView+ASConvenience.h>

View File

@@ -12,7 +12,7 @@
#import "ASAssert.h" #import "ASAssert.h"
#import "ASCollectionView.h" #import "ASCollectionView.h"
#import "CGRect+ASConvenience.h" #import "CoreGraphics+ASConvenience.h"
#import "UICollectionViewLayout+ASConvenience.h" #import "UICollectionViewLayout+ASConvenience.h"
struct ASRangeGeometry { struct ASRangeGeometry {

View File

@@ -12,7 +12,7 @@
#import "ASAssert.h" #import "ASAssert.h"
#import "ASDisplayNode.h" #import "ASDisplayNode.h"
#import "ASIndexPath.h" #import "ASIndexPath.h"
#import "CGRect+ASConvenience.h" #import "CoreGraphics+ASConvenience.h"
#include <map> #include <map>
#include <vector> #include <vector>

View File

@@ -27,6 +27,24 @@ NS_ASSUME_NONNULL_BEGIN
ASDISPLAYNODE_EXTERN_C_BEGIN ASDISPLAYNODE_EXTERN_C_BEGIN
ASDISPLAYNODE_INLINE CGFloat ASCGFloatFromString(NSString *string)
{
#if CGFLOAT_IS_DOUBLE
return string.doubleValue;
#else
return string.floatValue;
#endif
}
ASDISPLAYNODE_INLINE CGFloat ASCGFloatFromNumber(NSNumber *number)
{
#if CGFLOAT_IS_DOUBLE
return number.doubleValue;
#else
return number.floatValue;
#endif
}
ASDISPLAYNODE_INLINE BOOL CGSizeEqualToSizeWithIn(CGSize size1, CGSize size2, CGFloat delta) ASDISPLAYNODE_INLINE BOOL CGSizeEqualToSizeWithIn(CGSize size1, CGSize size2, CGFloat delta)
{ {
return fabs(size1.width - size2.width) < delta && fabs(size1.height - size2.height) < delta; return fabs(size1.width - size2.width) < delta && fabs(size1.height - size2.height) < delta;

View File

@@ -8,7 +8,7 @@
// of patent rights can be found in the PATENTS file in the same directory. // of patent rights can be found in the PATENTS file in the same directory.
// //
#import "CGRect+ASConvenience.h" #import "CoreGraphics+ASConvenience.h"
ASDirectionalScreenfulBuffer ASDirectionalScreenfulBufferHorizontal(ASScrollDirection scrollDirection, ASDirectionalScreenfulBuffer ASDirectionalScreenfulBufferHorizontal(ASScrollDirection scrollDirection,
ASRangeTuningParameters rangeTuningParameters) ASRangeTuningParameters rangeTuningParameters)

View File

@@ -10,6 +10,7 @@
#import "ASDimension.h" #import "ASDimension.h"
#import "ASAssert.h" #import "ASAssert.h"
#import "CoreGraphics+ASConvenience.h"
#pragma mark - ASDimension #pragma mark - ASDimension
@@ -17,32 +18,24 @@ ASDimension const ASDimensionAuto = {ASDimensionUnitAuto, 0};
ASOVERLOADABLE ASDimension ASDimensionMake(NSString *dimension) ASOVERLOADABLE ASDimension ASDimensionMake(NSString *dimension)
{ {
// Handle empty string if (dimension.length > 0) {
if (dimension.length == 0) {
return ASDimensionMake(ASDimensionUnitPoints, 0.0); // Handle points
} if ([dimension hasSuffix:@"pt"]) {
return ASDimensionMake(ASDimensionUnitPoints, ASCGFloatFromString(dimension));
}
// Handle auto
if ([dimension isEqualToString:@"auto"]) {
return ASDimensionAuto;
}
// Handle points // Handle percent
NSUInteger pointsStringLocation = [dimension rangeOfString:@"pt"].location; if ([dimension hasSuffix:@"%"]) {
if (pointsStringLocation != NSNotFound) { return ASDimensionMake(ASDimensionUnitFraction, (ASCGFloatFromString(dimension) / 100.0));
// Check if points is at the end and remove it
if (pointsStringLocation == (dimension.length-2)) {
dimension = [dimension substringToIndex:(dimension.length-2)];
return ASDimensionMake(ASDimensionUnitPoints, dimension.floatValue);
} }
} }
// Handle fraction
NSUInteger percentStringLocation = [dimension rangeOfString:@"%"].location;
if (percentStringLocation != NSNotFound) {
// Check if percent is at the end and remove it
if (percentStringLocation == (dimension.length-1)) {
dimension = [dimension substringToIndex:(dimension.length-1)];
return ASDimensionMake(ASDimensionUnitFraction, (dimension.floatValue / 100.0));
}
}
// Assert as parsing went wrong
ASDisplayNodeCAssert(NO, @"Parsing dimension failed for: %@", dimension); ASDisplayNodeCAssert(NO, @"Parsing dimension failed for: %@", dimension);
return ASDimensionAuto; return ASDimensionAuto;
} }
@@ -66,12 +59,12 @@ NSString *NSStringFromASDimension(ASDimension dimension)
- (ASDimension)as_pointDimension - (ASDimension)as_pointDimension
{ {
return ASDimensionMake(ASDimensionUnitPoints, self.floatValue); return ASDimensionMake(ASDimensionUnitPoints, ASCGFloatFromNumber(self));
} }
- (ASDimension)as_fractionDimension - (ASDimension)as_fractionDimension
{ {
return ASDimensionMake(ASDimensionUnitFraction, self.floatValue); return ASDimensionMake(ASDimensionUnitFraction, ASCGFloatFromNumber(self));
} }
@end @end

View File

@@ -9,7 +9,7 @@
// //
#import <XCTest/XCTest.h> #import <XCTest/XCTest.h>
#import "ASXCTExtensions.h"
#import "ASDimension.h" #import "ASDimension.h"
@@ -22,20 +22,20 @@
{ {
XCTAssertNoThrow(ASDimensionMake(ASDimensionUnitAuto, 0)); XCTAssertNoThrow(ASDimensionMake(ASDimensionUnitAuto, 0));
XCTAssertThrows(ASDimensionMake(ASDimensionUnitAuto, 100)); XCTAssertThrows(ASDimensionMake(ASDimensionUnitAuto, 100));
XCTAssertTrue(ASDimensionEqualToDimension(ASDimensionMake(ASDimensionUnitFraction, 0.5), ASDimensionMake(@"50%"))); XCTAssertThrows(ASDimensionMake(@""));
ASXCTAssertEqualDimensions(ASDimensionAuto, ASDimensionMake(@"auto"));
} }
- (void)testCreatingDimensionUnitFraction - (void)testCreatingDimensionUnitFraction
{ {
XCTAssertNoThrow(ASDimensionMake(ASDimensionUnitFraction, 0.5)); XCTAssertNoThrow(ASDimensionMake(ASDimensionUnitFraction, 0.5));
XCTAssertThrows(ASDimensionMake(ASDimensionUnitAuto, 100)); ASXCTAssertEqualDimensions(ASDimensionMake(ASDimensionUnitFraction, 0.5), ASDimensionMake(@"50%"));
XCTAssertTrue(ASDimensionEqualToDimension(ASDimensionMake(ASDimensionUnitFraction, 0.5), ASDimensionMake(@"50%")));
} }
- (void)testCreatingDimensionUnitPoints - (void)testCreatingDimensionUnitPoints
{ {
XCTAssertNoThrow(ASDimensionMake(ASDimensionUnitPoints, 100)); XCTAssertNoThrow(ASDimensionMake(ASDimensionUnitPoints, 100));
XCTAssertTrue(ASDimensionEqualToDimension(ASDimensionMake(ASDimensionUnitPoints, 100), ASDimensionMake(@"100pt"))); ASXCTAssertEqualDimensions(ASDimensionMake(ASDimensionUnitPoints, 100), ASDimensionMake(@"100pt"));
} }
- (void)testIntersectingOverlappingSizeRangesReturnsTheirIntersection - (void)testIntersectingOverlappingSizeRangesReturnsTheirIntersection

View File

@@ -12,7 +12,7 @@
#import <AsyncDisplayKit/ASLayout.h> #import <AsyncDisplayKit/ASLayout.h>
#import "ASinternalHelpers.h" #import "ASinternalHelpers.h"
#import "ASXCTExtensions.h" #import "ASXCTExtensions.h"
#include "CGRect+ASConvenience.h" #import "CoreGraphics+ASConvenience.h"
/** /**
* NOTE: This test case is not run during the "test" action. You have to run it manually (click the little diamond.) * NOTE: This test case is not run during the "test" action. You have to run it manually (click the little diamond.)

View File

@@ -16,7 +16,7 @@
#import <AsyncDisplayKit/ASTextNode.h> #import <AsyncDisplayKit/ASTextNode.h>
#import <XCTest/XCTest.h> #import <XCTest/XCTest.h>
#include "CGRect+ASConvenience.h" #import "CoreGraphics+ASConvenience.h"
@interface ASTextNodeTestDelegate : NSObject <ASTextNodeDelegate> @interface ASTextNodeTestDelegate : NSObject <ASTextNodeDelegate>

View File

@@ -25,3 +25,9 @@
#define ASXCTAssertNotEqualRects(r0, r1, ...) \ #define ASXCTAssertNotEqualRects(r0, r1, ...) \
_XCTPrimitiveAssertNotEqualObjects(self, NSStringFromCGRect(r0), @#r0, NSStringFromCGRect(r1), @#r1, __VA_ARGS__) _XCTPrimitiveAssertNotEqualObjects(self, NSStringFromCGRect(r0), @#r0, NSStringFromCGRect(r1), @#r1, __VA_ARGS__)
#define ASXCTAssertEqualDimensions(r0, r1, ...) \
_XCTPrimitiveAssertEqualObjects(self, NSStringFromASDimension(r0), @#r0, NSStringFromASDimension(r1), @#r1, __VA_ARGS__)
#define ASXCTAssertNotEqualDimensions(r0, r1, ...) \
_XCTPrimitiveAssertNotEqualObjects(self, NSStringFromASDimension(r0), @#r0, NSStringFromASDimension(r1), @#r1, __VA_ARGS__)