Add 'submodules/AsyncDisplayKit/' from commit '02bedc12816e251ad71777f9d2578329b6d2bef6'
git-subtree-dir: submodules/AsyncDisplayKit git-subtree-mainline:d06f423e0egit-subtree-split:02bedc1281
@@ -0,0 +1,5 @@
|
||||
source 'https://github.com/CocoaPods/Specs.git'
|
||||
platform :ios, '9.0'
|
||||
target 'Sample' do
|
||||
pod 'Texture', :path => '../..'
|
||||
end
|
||||
@@ -0,0 +1,485 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
3EEA4EE91BECC4A1008A7F35 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EEA4EE81BECC4A1008A7F35 /* main.m */; };
|
||||
3EEA4EEC1BECC4A1008A7F35 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EEA4EEB1BECC4A1008A7F35 /* AppDelegate.m */; };
|
||||
3EEA4EEF1BECC4A1008A7F35 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EEA4EEE1BECC4A1008A7F35 /* ViewController.m */; };
|
||||
3EEA4EF41BECC4A1008A7F35 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4EF31BECC4A1008A7F35 /* Assets.xcassets */; };
|
||||
3EEA4F011BECC4E8008A7F35 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4EFE1BECC4E8008A7F35 /* Default-568h@2x.png */; };
|
||||
3EEA4F021BECC4E8008A7F35 /* Default-667h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4EFF1BECC4E8008A7F35 /* Default-667h@2x.png */; };
|
||||
3EEA4F031BECC4E8008A7F35 /* Default-736h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F001BECC4E8008A7F35 /* Default-736h@3x.png */; };
|
||||
3EEA4F061BECC6C9008A7F35 /* Post.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EEA4F051BECC6C9008A7F35 /* Post.m */; };
|
||||
3EEA4F091BECC855008A7F35 /* PostNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EEA4F081BECC855008A7F35 /* PostNode.m */; };
|
||||
3EEA4F0C1BECCA0A008A7F35 /* TextStyles.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EEA4F0B1BECCA0A008A7F35 /* TextStyles.m */; };
|
||||
3EEA4F141BECDCD6008A7F35 /* icon_android.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F0E1BECDCD6008A7F35 /* icon_android.png */; };
|
||||
3EEA4F151BECDCD6008A7F35 /* icon_android@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F0F1BECDCD6008A7F35 /* icon_android@2x.png */; };
|
||||
3EEA4F161BECDCD6008A7F35 /* icon_android@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F101BECDCD6008A7F35 /* icon_android@3x.png */; };
|
||||
3EEA4F171BECDCD6008A7F35 /* icon_ios.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F111BECDCD6008A7F35 /* icon_ios.png */; };
|
||||
3EEA4F181BECDCD6008A7F35 /* icon_ios@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F121BECDCD6008A7F35 /* icon_ios@2x.png */; };
|
||||
3EEA4F191BECDCD6008A7F35 /* icon_ios@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F131BECDCD6008A7F35 /* icon_ios@3x.png */; };
|
||||
3EEA4F1D1BECE358008A7F35 /* LikesNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EEA4F1C1BECE358008A7F35 /* LikesNode.m */; };
|
||||
3EEA4F2A1BECE440008A7F35 /* icon_liked.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F1E1BECE440008A7F35 /* icon_liked.png */; };
|
||||
3EEA4F2B1BECE440008A7F35 /* icon_liked@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F1F1BECE440008A7F35 /* icon_liked@2x.png */; };
|
||||
3EEA4F2C1BECE440008A7F35 /* icon_liked@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F201BECE440008A7F35 /* icon_liked@3x.png */; };
|
||||
3EEA4F301BECE440008A7F35 /* icon_like@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F241BECE440008A7F35 /* icon_like@3x.png */; };
|
||||
3EEA4F311BECE440008A7F35 /* icon_like@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F251BECE440008A7F35 /* icon_like@2x.png */; };
|
||||
3EEA4F321BECE440008A7F35 /* icon_like.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F261BECE440008A7F35 /* icon_like.png */; };
|
||||
3EEA4F331BECE440008A7F35 /* icon_comment@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F271BECE440008A7F35 /* icon_comment@3x.png */; };
|
||||
3EEA4F341BECE440008A7F35 /* icon_comment@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F281BECE440008A7F35 /* icon_comment@2x.png */; };
|
||||
3EEA4F351BECE440008A7F35 /* icon_comment.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F291BECE440008A7F35 /* icon_comment.png */; };
|
||||
3EEA4F381BECE775008A7F35 /* CommentsNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EEA4F371BECE775008A7F35 /* CommentsNode.m */; };
|
||||
3EEA4F3C1BECE99F008A7F35 /* icon_more.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F391BECE99F008A7F35 /* icon_more.png */; };
|
||||
3EEA4F3D1BECE99F008A7F35 /* icon_more@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F3A1BECE99F008A7F35 /* icon_more@2x.png */; };
|
||||
3EEA4F3E1BECE99F008A7F35 /* icon_more@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3EEA4F3B1BECE99F008A7F35 /* icon_more@3x.png */; };
|
||||
93964C9FCC28D92625106430 /* libPods-Sample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 193CE60FE6429EFEBF6EA52B /* libPods-Sample.a */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
193CE60FE6429EFEBF6EA52B /* libPods-Sample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Sample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
3EEA4EE41BECC4A1008A7F35 /* Sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Sample.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
3EEA4EE81BECC4A1008A7F35 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
3EEA4EEA1BECC4A1008A7F35 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
||||
3EEA4EEB1BECC4A1008A7F35 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
|
||||
3EEA4EED1BECC4A1008A7F35 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
|
||||
3EEA4EEE1BECC4A1008A7F35 /* ViewController.m */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; tabWidth = 2; };
|
||||
3EEA4EF31BECC4A1008A7F35 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
3EEA4EF81BECC4A1008A7F35 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
3EEA4EFE1BECC4E8008A7F35 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
|
||||
3EEA4EFF1BECC4E8008A7F35 /* Default-667h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-667h@2x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F001BECC4E8008A7F35 /* Default-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-736h@3x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F041BECC6C9008A7F35 /* Post.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Post.h; sourceTree = "<group>"; };
|
||||
3EEA4F051BECC6C9008A7F35 /* Post.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Post.m; sourceTree = "<group>"; };
|
||||
3EEA4F071BECC855008A7F35 /* PostNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PostNode.h; sourceTree = "<group>"; };
|
||||
3EEA4F081BECC855008A7F35 /* PostNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PostNode.m; sourceTree = "<group>"; };
|
||||
3EEA4F0A1BECCA0A008A7F35 /* TextStyles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextStyles.h; sourceTree = "<group>"; };
|
||||
3EEA4F0B1BECCA0A008A7F35 /* TextStyles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TextStyles.m; sourceTree = "<group>"; };
|
||||
3EEA4F0E1BECDCD6008A7F35 /* icon_android.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_android.png; sourceTree = "<group>"; };
|
||||
3EEA4F0F1BECDCD6008A7F35 /* icon_android@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_android@2x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F101BECDCD6008A7F35 /* icon_android@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_android@3x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F111BECDCD6008A7F35 /* icon_ios.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_ios.png; sourceTree = "<group>"; };
|
||||
3EEA4F121BECDCD6008A7F35 /* icon_ios@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_ios@2x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F131BECDCD6008A7F35 /* icon_ios@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_ios@3x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F1B1BECE358008A7F35 /* LikesNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LikesNode.h; sourceTree = "<group>"; };
|
||||
3EEA4F1C1BECE358008A7F35 /* LikesNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LikesNode.m; sourceTree = "<group>"; };
|
||||
3EEA4F1E1BECE440008A7F35 /* icon_liked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_liked.png; sourceTree = "<group>"; };
|
||||
3EEA4F1F1BECE440008A7F35 /* icon_liked@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_liked@2x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F201BECE440008A7F35 /* icon_liked@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_liked@3x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F241BECE440008A7F35 /* icon_like@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_like@3x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F251BECE440008A7F35 /* icon_like@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_like@2x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F261BECE440008A7F35 /* icon_like.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_like.png; sourceTree = "<group>"; };
|
||||
3EEA4F271BECE440008A7F35 /* icon_comment@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_comment@3x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F281BECE440008A7F35 /* icon_comment@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_comment@2x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F291BECE440008A7F35 /* icon_comment.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_comment.png; sourceTree = "<group>"; };
|
||||
3EEA4F361BECE775008A7F35 /* CommentsNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommentsNode.h; sourceTree = "<group>"; };
|
||||
3EEA4F371BECE775008A7F35 /* CommentsNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommentsNode.m; sourceTree = "<group>"; };
|
||||
3EEA4F391BECE99F008A7F35 /* icon_more.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_more.png; sourceTree = "<group>"; };
|
||||
3EEA4F3A1BECE99F008A7F35 /* icon_more@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_more@2x.png"; sourceTree = "<group>"; };
|
||||
3EEA4F3B1BECE99F008A7F35 /* icon_more@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon_more@3x.png"; sourceTree = "<group>"; };
|
||||
CC6F2ABE8383FAB21802C734 /* Pods-Sample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Sample/Pods-Sample.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
FCCC1AD413FCA8603156ED15 /* Pods-Sample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sample.release.xcconfig"; path = "Pods/Target Support Files/Pods-Sample/Pods-Sample.release.xcconfig"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
3EEA4EE11BECC4A1008A7F35 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
93964C9FCC28D92625106430 /* libPods-Sample.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
3EEA4EDB1BECC4A1008A7F35 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3EEA4EE61BECC4A1008A7F35 /* Sample */,
|
||||
3EEA4EE51BECC4A1008A7F35 /* Products */,
|
||||
842ADAFE88475D19B24183AC /* Pods */,
|
||||
EED34FA6D8171DF44757C852 /* Frameworks */,
|
||||
);
|
||||
indentWidth = 2;
|
||||
sourceTree = "<group>";
|
||||
tabWidth = 2;
|
||||
};
|
||||
3EEA4EE51BECC4A1008A7F35 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3EEA4EE41BECC4A1008A7F35 /* Sample.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3EEA4EE61BECC4A1008A7F35 /* Sample */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3EEA4F0D1BECDCA6008A7F35 /* Images */,
|
||||
3EEA4EEA1BECC4A1008A7F35 /* AppDelegate.h */,
|
||||
3EEA4EEB1BECC4A1008A7F35 /* AppDelegate.m */,
|
||||
3EEA4EED1BECC4A1008A7F35 /* ViewController.h */,
|
||||
3EEA4EEE1BECC4A1008A7F35 /* ViewController.m */,
|
||||
3EEA4EF31BECC4A1008A7F35 /* Assets.xcassets */,
|
||||
3EEA4EF81BECC4A1008A7F35 /* Info.plist */,
|
||||
3EEA4EE71BECC4A1008A7F35 /* Supporting Files */,
|
||||
3EEA4F041BECC6C9008A7F35 /* Post.h */,
|
||||
3EEA4F051BECC6C9008A7F35 /* Post.m */,
|
||||
3EEA4F071BECC855008A7F35 /* PostNode.h */,
|
||||
3EEA4F081BECC855008A7F35 /* PostNode.m */,
|
||||
3EEA4F0A1BECCA0A008A7F35 /* TextStyles.h */,
|
||||
3EEA4F0B1BECCA0A008A7F35 /* TextStyles.m */,
|
||||
3EEA4F1B1BECE358008A7F35 /* LikesNode.h */,
|
||||
3EEA4F1C1BECE358008A7F35 /* LikesNode.m */,
|
||||
3EEA4F361BECE775008A7F35 /* CommentsNode.h */,
|
||||
3EEA4F371BECE775008A7F35 /* CommentsNode.m */,
|
||||
);
|
||||
path = Sample;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3EEA4EE71BECC4A1008A7F35 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3EEA4EFE1BECC4E8008A7F35 /* Default-568h@2x.png */,
|
||||
3EEA4EFF1BECC4E8008A7F35 /* Default-667h@2x.png */,
|
||||
3EEA4F001BECC4E8008A7F35 /* Default-736h@3x.png */,
|
||||
3EEA4EE81BECC4A1008A7F35 /* main.m */,
|
||||
);
|
||||
name = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3EEA4F0D1BECDCA6008A7F35 /* Images */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3EEA4F391BECE99F008A7F35 /* icon_more.png */,
|
||||
3EEA4F3A1BECE99F008A7F35 /* icon_more@2x.png */,
|
||||
3EEA4F3B1BECE99F008A7F35 /* icon_more@3x.png */,
|
||||
3EEA4F1E1BECE440008A7F35 /* icon_liked.png */,
|
||||
3EEA4F1F1BECE440008A7F35 /* icon_liked@2x.png */,
|
||||
3EEA4F201BECE440008A7F35 /* icon_liked@3x.png */,
|
||||
3EEA4F241BECE440008A7F35 /* icon_like@3x.png */,
|
||||
3EEA4F251BECE440008A7F35 /* icon_like@2x.png */,
|
||||
3EEA4F261BECE440008A7F35 /* icon_like.png */,
|
||||
3EEA4F271BECE440008A7F35 /* icon_comment@3x.png */,
|
||||
3EEA4F281BECE440008A7F35 /* icon_comment@2x.png */,
|
||||
3EEA4F291BECE440008A7F35 /* icon_comment.png */,
|
||||
3EEA4F0E1BECDCD6008A7F35 /* icon_android.png */,
|
||||
3EEA4F0F1BECDCD6008A7F35 /* icon_android@2x.png */,
|
||||
3EEA4F101BECDCD6008A7F35 /* icon_android@3x.png */,
|
||||
3EEA4F111BECDCD6008A7F35 /* icon_ios.png */,
|
||||
3EEA4F121BECDCD6008A7F35 /* icon_ios@2x.png */,
|
||||
3EEA4F131BECDCD6008A7F35 /* icon_ios@3x.png */,
|
||||
);
|
||||
name = Images;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
842ADAFE88475D19B24183AC /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
CC6F2ABE8383FAB21802C734 /* Pods-Sample.debug.xcconfig */,
|
||||
FCCC1AD413FCA8603156ED15 /* Pods-Sample.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
EED34FA6D8171DF44757C852 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
193CE60FE6429EFEBF6EA52B /* libPods-Sample.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
3EEA4EE31BECC4A1008A7F35 /* Sample */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 3EEA4EFB1BECC4A1008A7F35 /* Build configuration list for PBXNativeTarget "Sample" */;
|
||||
buildPhases = (
|
||||
B5BD9E5609B2CB179EEE0CF4 /* [CP] Check Pods Manifest.lock */,
|
||||
3EEA4EE01BECC4A1008A7F35 /* Sources */,
|
||||
3EEA4EE11BECC4A1008A7F35 /* Frameworks */,
|
||||
3EEA4EE21BECC4A1008A7F35 /* Resources */,
|
||||
21F2C1D9B53F9468EAF1653F /* [CP] Copy Pods Resources */,
|
||||
852437589F1D53B9483A75DF /* [CP] Embed Pods Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Sample;
|
||||
productName = Sample;
|
||||
productReference = 3EEA4EE41BECC4A1008A7F35 /* Sample.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
3EEA4EDC1BECC4A1008A7F35 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0710;
|
||||
ORGANIZATIONNAME = Facebook;
|
||||
TargetAttributes = {
|
||||
3EEA4EE31BECC4A1008A7F35 = {
|
||||
CreatedOnToolsVersion = 7.1;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 3EEA4EDF1BECC4A1008A7F35 /* Build configuration list for PBXProject "Sample" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 3EEA4EDB1BECC4A1008A7F35;
|
||||
productRefGroup = 3EEA4EE51BECC4A1008A7F35 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
3EEA4EE31BECC4A1008A7F35 /* Sample */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
3EEA4EE21BECC4A1008A7F35 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
3EEA4F2A1BECE440008A7F35 /* icon_liked.png in Resources */,
|
||||
3EEA4F181BECDCD6008A7F35 /* icon_ios@2x.png in Resources */,
|
||||
3EEA4F311BECE440008A7F35 /* icon_like@2x.png in Resources */,
|
||||
3EEA4F3D1BECE99F008A7F35 /* icon_more@2x.png in Resources */,
|
||||
3EEA4F141BECDCD6008A7F35 /* icon_android.png in Resources */,
|
||||
3EEA4F3E1BECE99F008A7F35 /* icon_more@3x.png in Resources */,
|
||||
3EEA4F2B1BECE440008A7F35 /* icon_liked@2x.png in Resources */,
|
||||
3EEA4F351BECE440008A7F35 /* icon_comment.png in Resources */,
|
||||
3EEA4EF41BECC4A1008A7F35 /* Assets.xcassets in Resources */,
|
||||
3EEA4F171BECDCD6008A7F35 /* icon_ios.png in Resources */,
|
||||
3EEA4F021BECC4E8008A7F35 /* Default-667h@2x.png in Resources */,
|
||||
3EEA4F161BECDCD6008A7F35 /* icon_android@3x.png in Resources */,
|
||||
3EEA4F191BECDCD6008A7F35 /* icon_ios@3x.png in Resources */,
|
||||
3EEA4F331BECE440008A7F35 /* icon_comment@3x.png in Resources */,
|
||||
3EEA4F341BECE440008A7F35 /* icon_comment@2x.png in Resources */,
|
||||
3EEA4F321BECE440008A7F35 /* icon_like.png in Resources */,
|
||||
3EEA4F151BECDCD6008A7F35 /* icon_android@2x.png in Resources */,
|
||||
3EEA4F301BECE440008A7F35 /* icon_like@3x.png in Resources */,
|
||||
3EEA4F2C1BECE440008A7F35 /* icon_liked@3x.png in Resources */,
|
||||
3EEA4F011BECC4E8008A7F35 /* Default-568h@2x.png in Resources */,
|
||||
3EEA4F031BECC4E8008A7F35 /* Default-736h@3x.png in Resources */,
|
||||
3EEA4F3C1BECE99F008A7F35 /* icon_more.png in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
21F2C1D9B53F9468EAF1653F /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Sample/Pods-Sample-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
852437589F1D53B9483A75DF /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Sample/Pods-Sample-frameworks.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
B5BD9E5609B2CB179EEE0CF4 /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||
"${PODS_ROOT}/Manifest.lock",
|
||||
);
|
||||
name = "[CP] Check Pods Manifest.lock";
|
||||
outputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/Pods-Sample-checkManifestLockResult.txt",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
3EEA4EE01BECC4A1008A7F35 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
3EEA4EEF1BECC4A1008A7F35 /* ViewController.m in Sources */,
|
||||
3EEA4EEC1BECC4A1008A7F35 /* AppDelegate.m in Sources */,
|
||||
3EEA4EE91BECC4A1008A7F35 /* main.m in Sources */,
|
||||
3EEA4F061BECC6C9008A7F35 /* Post.m in Sources */,
|
||||
3EEA4F0C1BECCA0A008A7F35 /* TextStyles.m in Sources */,
|
||||
3EEA4F381BECE775008A7F35 /* CommentsNode.m in Sources */,
|
||||
3EEA4F091BECC855008A7F35 /* PostNode.m in Sources */,
|
||||
3EEA4F1D1BECE358008A7F35 /* LikesNode.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
3EEA4EF91BECC4A1008A7F35 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
3EEA4EFA1BECC4A1008A7F35 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
3EEA4EFC1BECC4A1008A7F35 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = CC6F2ABE8383FAB21802C734 /* Pods-Sample.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
INFOPLIST_FILE = Sample/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.facebook.AsyncDisplayKit.Sample;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
3EEA4EFD1BECC4A1008A7F35 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = FCCC1AD413FCA8603156ED15 /* Pods-Sample.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
INFOPLIST_FILE = Sample/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.facebook.AsyncDisplayKit.Sample;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
3EEA4EDF1BECC4A1008A7F35 /* Build configuration list for PBXProject "Sample" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
3EEA4EF91BECC4A1008A7F35 /* Debug */,
|
||||
3EEA4EFA1BECC4A1008A7F35 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
3EEA4EFB1BECC4A1008A7F35 /* Build configuration list for PBXNativeTarget "Sample" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
3EEA4EFC1BECC4A1008A7F35 /* Debug */,
|
||||
3EEA4EFD1BECC4A1008A7F35 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 3EEA4EDC1BECC4A1008A7F35 /* Project object */;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:Sample.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0710"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3EEA4EE31BECC4A1008A7F35"
|
||||
BuildableName = "Sample.app"
|
||||
BlueprintName = "Sample"
|
||||
ReferencedContainer = "container:Sample.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3EEA4EE31BECC4A1008A7F35"
|
||||
BuildableName = "Sample.app"
|
||||
BlueprintName = "Sample"
|
||||
ReferencedContainer = "container:Sample.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3EEA4EE31BECC4A1008A7F35"
|
||||
BuildableName = "Sample.app"
|
||||
BlueprintName = "Sample"
|
||||
ReferencedContainer = "container:Sample.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3EEA4EE31BECC4A1008A7F35"
|
||||
BuildableName = "Sample.app"
|
||||
BlueprintName = "Sample"
|
||||
ReferencedContainer = "container:Sample.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// AppDelegate.h
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
||||
|
||||
@property (strong, nonatomic) UIWindow *window;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,24 @@
|
||||
//
|
||||
// AppDelegate.m
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import "AppDelegate.h"
|
||||
#import "ViewController.h"
|
||||
|
||||
@implementation AppDelegate
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||
{
|
||||
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
|
||||
self.window.backgroundColor = [UIColor whiteColor];
|
||||
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];
|
||||
[self.window makeKeyAndVisible];
|
||||
return YES;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// CommentsNode.h
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import <AsyncDisplayKit/AsyncDisplayKit.h>
|
||||
|
||||
@interface CommentsNode : ASControlNode
|
||||
|
||||
- (instancetype)initWithCommentsCount:(NSInteger)comentsCount;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,62 @@
|
||||
//
|
||||
// CommentsNode.m
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import "CommentsNode.h"
|
||||
#import "TextStyles.h"
|
||||
|
||||
@interface CommentsNode ()
|
||||
@property (nonatomic, strong) ASImageNode *iconNode;
|
||||
@property (nonatomic, strong) ASTextNode *countNode;
|
||||
@property (nonatomic, assign) NSInteger commentsCount;
|
||||
@end
|
||||
|
||||
@implementation CommentsNode
|
||||
|
||||
- (instancetype)initWithCommentsCount:(NSInteger)comentsCount
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_commentsCount = comentsCount;
|
||||
|
||||
_iconNode = [[ASImageNode alloc] init];
|
||||
_iconNode.image = [UIImage imageNamed:@"icon_comment.png"];
|
||||
[self addSubnode:_iconNode];
|
||||
|
||||
_countNode = [[ASTextNode alloc] init];
|
||||
if (_commentsCount > 0) {
|
||||
_countNode.attributedText = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%zd", _commentsCount] attributes:[TextStyles cellControlStyle]];
|
||||
}
|
||||
[self addSubnode:_countNode];
|
||||
|
||||
// make it tappable easily
|
||||
self.hitTestSlop = UIEdgeInsetsMake(-10, -10, -10, -10);
|
||||
}
|
||||
|
||||
return self;
|
||||
|
||||
}
|
||||
|
||||
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
|
||||
{
|
||||
ASStackLayoutSpec *mainStack =
|
||||
[ASStackLayoutSpec
|
||||
stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal
|
||||
spacing:6.0
|
||||
justifyContent:ASStackLayoutJustifyContentStart
|
||||
alignItems:ASStackLayoutAlignItemsCenter
|
||||
children:@[_iconNode, _countNode]];
|
||||
|
||||
// Adjust size
|
||||
mainStack.style.minWidth = ASDimensionMakeWithPoints(60.0);
|
||||
mainStack.style.maxHeight = ASDimensionMakeWithPoints(40.0);
|
||||
|
||||
return mainStack;
|
||||
}
|
||||
|
||||
@end
|
||||
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// LikesNode.h
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import <AsyncDisplayKit/AsyncDisplayKit.h>
|
||||
|
||||
@interface LikesNode : ASControlNode
|
||||
|
||||
- (instancetype)initWithLikesCount:(NSInteger)likesCount;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,75 @@
|
||||
//
|
||||
// LikesNode.m
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import "LikesNode.h"
|
||||
#import "TextStyles.h"
|
||||
|
||||
@interface LikesNode ()
|
||||
@property (nonatomic, strong) ASImageNode *iconNode;
|
||||
@property (nonatomic, strong) ASTextNode *countNode;
|
||||
@property (nonatomic, assign) NSInteger likesCount;
|
||||
@property (nonatomic, assign) BOOL liked;
|
||||
@end
|
||||
|
||||
@implementation LikesNode
|
||||
|
||||
- (instancetype)initWithLikesCount:(NSInteger)likesCount
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_likesCount = likesCount;
|
||||
_liked = (_likesCount > 0) ? [LikesNode getYesOrNo] : NO;
|
||||
|
||||
_iconNode = [[ASImageNode alloc] init];
|
||||
_iconNode.image = (_liked) ? [UIImage imageNamed:@"icon_liked.png"] : [UIImage imageNamed:@"icon_like.png"];
|
||||
[self addSubnode:_iconNode];
|
||||
|
||||
_countNode = [[ASTextNode alloc] init];
|
||||
if (_likesCount > 0) {
|
||||
|
||||
NSDictionary *attributes = _liked ? [TextStyles cellControlColoredStyle] : [TextStyles cellControlStyle];
|
||||
_countNode.attributedText = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%ld", (long)_likesCount] attributes:attributes];
|
||||
|
||||
}
|
||||
[self addSubnode:_countNode];
|
||||
|
||||
// make it tappable easily
|
||||
self.hitTestSlop = UIEdgeInsetsMake(-10, -10, -10, -10);
|
||||
}
|
||||
|
||||
return self;
|
||||
|
||||
}
|
||||
|
||||
+ (BOOL)getYesOrNo
|
||||
{
|
||||
int tmp = (arc4random() % 30)+1;
|
||||
if (tmp % 5 == 0) {
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
|
||||
{
|
||||
ASStackLayoutSpec *mainStack =
|
||||
[ASStackLayoutSpec
|
||||
stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal
|
||||
spacing:6.0
|
||||
justifyContent:ASStackLayoutJustifyContentStart
|
||||
alignItems:ASStackLayoutAlignItemsCenter
|
||||
children:@[_iconNode, _countNode]];
|
||||
|
||||
mainStack.style.minWidth = ASDimensionMakeWithPoints(60.0);
|
||||
mainStack.style.maxHeight = ASDimensionMakeWithPoints(40.0);
|
||||
|
||||
return mainStack;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// Post.h
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface Post : NSObject
|
||||
|
||||
@property (nonatomic, copy) NSString *username;
|
||||
@property (nonatomic, copy) NSString *name;
|
||||
@property (nonatomic, copy) NSString *photo;
|
||||
@property (nonatomic, copy) NSString *post;
|
||||
@property (nonatomic, copy) NSString *time;
|
||||
@property (nonatomic, copy) NSString *media;
|
||||
@property (nonatomic, assign) NSInteger via;
|
||||
|
||||
@property (nonatomic, assign) NSInteger likes;
|
||||
@property (nonatomic, assign) NSInteger comments;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,13 @@
|
||||
//
|
||||
// Post.m
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import "Post.h"
|
||||
|
||||
@implementation Post
|
||||
@end
|
||||
@@ -0,0 +1,18 @@
|
||||
//
|
||||
// PostNode.h
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import <AsyncDisplayKit/AsyncDisplayKit.h>
|
||||
|
||||
@class Post;
|
||||
|
||||
@interface PostNode : ASCellNode
|
||||
|
||||
- (instancetype)initWithPost:(Post *)post;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,337 @@
|
||||
//
|
||||
// PostNode.m
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import "PostNode.h"
|
||||
#import "Post.h"
|
||||
#import "TextStyles.h"
|
||||
#import "LikesNode.h"
|
||||
#import "CommentsNode.h"
|
||||
|
||||
#define PostNodeDividerColor [UIColor lightGrayColor]
|
||||
|
||||
@interface PostNode() <ASNetworkImageNodeDelegate, ASTextNodeDelegate>
|
||||
|
||||
@property (strong, nonatomic) Post *post;
|
||||
@property (strong, nonatomic) ASDisplayNode *divider;
|
||||
@property (strong, nonatomic) ASTextNode *nameNode;
|
||||
@property (strong, nonatomic) ASTextNode *usernameNode;
|
||||
@property (strong, nonatomic) ASTextNode *timeNode;
|
||||
@property (strong, nonatomic) ASTextNode *postNode;
|
||||
@property (strong, nonatomic) ASImageNode *viaNode;
|
||||
@property (strong, nonatomic) ASNetworkImageNode *avatarNode;
|
||||
@property (strong, nonatomic) ASNetworkImageNode *mediaNode;
|
||||
@property (strong, nonatomic) LikesNode *likesNode;
|
||||
@property (strong, nonatomic) CommentsNode *commentsNode;
|
||||
@property (strong, nonatomic) ASImageNode *optionsNode;
|
||||
|
||||
@end
|
||||
|
||||
@implementation PostNode
|
||||
|
||||
#pragma mark - Lifecycle
|
||||
|
||||
- (instancetype)initWithPost:(Post *)post
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_post = post;
|
||||
|
||||
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||
|
||||
// Name node
|
||||
_nameNode = [[ASTextNode alloc] init];
|
||||
_nameNode.attributedText = [[NSAttributedString alloc] initWithString:_post.name attributes:[TextStyles nameStyle]];
|
||||
_nameNode.maximumNumberOfLines = 1;
|
||||
[self addSubnode:_nameNode];
|
||||
|
||||
// Username node
|
||||
_usernameNode = [[ASTextNode alloc] init];
|
||||
_usernameNode.attributedText = [[NSAttributedString alloc] initWithString:_post.username attributes:[TextStyles usernameStyle]];
|
||||
_usernameNode.style.flexShrink = 1.0; //if name and username don't fit to cell width, allow username shrink
|
||||
_usernameNode.truncationMode = NSLineBreakByTruncatingTail;
|
||||
_usernameNode.maximumNumberOfLines = 1;
|
||||
[self addSubnode:_usernameNode];
|
||||
|
||||
// Time node
|
||||
_timeNode = [[ASTextNode alloc] init];
|
||||
_timeNode.attributedText = [[NSAttributedString alloc] initWithString:_post.time attributes:[TextStyles timeStyle]];
|
||||
[self addSubnode:_timeNode];
|
||||
|
||||
// Post node
|
||||
_postNode = [[ASTextNode alloc] init];
|
||||
|
||||
// Processing URLs in post
|
||||
NSString *kLinkAttributeName = @"TextLinkAttributeName";
|
||||
|
||||
if (![_post.post isEqualToString:@""]) {
|
||||
|
||||
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:_post.post attributes:[TextStyles postStyle]];
|
||||
|
||||
NSDataDetector *urlDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
|
||||
|
||||
[urlDetector enumerateMatchesInString:attrString.string options:kNilOptions range:NSMakeRange(0, attrString.string.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop){
|
||||
|
||||
if (result.resultType == NSTextCheckingTypeLink) {
|
||||
|
||||
NSMutableDictionary *linkAttributes = [[NSMutableDictionary alloc] initWithDictionary:[TextStyles postLinkStyle]];
|
||||
linkAttributes[kLinkAttributeName] = [NSURL URLWithString:result.URL.absoluteString];
|
||||
|
||||
[attrString addAttributes:linkAttributes range:result.range];
|
||||
|
||||
}
|
||||
|
||||
}];
|
||||
|
||||
// Configure node to support tappable links
|
||||
_postNode.delegate = self;
|
||||
_postNode.userInteractionEnabled = YES;
|
||||
_postNode.linkAttributeNames = @[ kLinkAttributeName ];
|
||||
_postNode.attributedText = attrString;
|
||||
_postNode.passthroughNonlinkTouches = YES; // passes touches through when they aren't on a link
|
||||
|
||||
}
|
||||
|
||||
[self addSubnode:_postNode];
|
||||
|
||||
|
||||
// Media
|
||||
if (![_post.media isEqualToString:@""]) {
|
||||
|
||||
_mediaNode = [[ASNetworkImageNode alloc] init];
|
||||
_mediaNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor();
|
||||
_mediaNode.cornerRadius = 4.0;
|
||||
_mediaNode.URL = [NSURL URLWithString:_post.media];
|
||||
_mediaNode.delegate = self;
|
||||
_mediaNode.imageModificationBlock = ^UIImage *(UIImage *image) {
|
||||
|
||||
UIImage *modifiedImage;
|
||||
CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
|
||||
|
||||
UIGraphicsBeginImageContextWithOptions(image.size, false, [[UIScreen mainScreen] scale]);
|
||||
|
||||
[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:8.0] addClip];
|
||||
[image drawInRect:rect];
|
||||
modifiedImage = UIGraphicsGetImageFromCurrentImageContext();
|
||||
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
return modifiedImage;
|
||||
|
||||
};
|
||||
[self addSubnode:_mediaNode];
|
||||
}
|
||||
|
||||
// User pic
|
||||
_avatarNode = [[ASNetworkImageNode alloc] init];
|
||||
_avatarNode.backgroundColor = ASDisplayNodeDefaultPlaceholderColor();
|
||||
_avatarNode.style.width = ASDimensionMakeWithPoints(44);
|
||||
_avatarNode.style.height = ASDimensionMakeWithPoints(44);
|
||||
_avatarNode.cornerRadius = 22.0;
|
||||
_avatarNode.URL = [NSURL URLWithString:_post.photo];
|
||||
_avatarNode.imageModificationBlock = ^UIImage *(UIImage *image) {
|
||||
|
||||
UIImage *modifiedImage;
|
||||
CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
|
||||
|
||||
UIGraphicsBeginImageContextWithOptions(image.size, false, [[UIScreen mainScreen] scale]);
|
||||
|
||||
[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:44.0] addClip];
|
||||
[image drawInRect:rect];
|
||||
modifiedImage = UIGraphicsGetImageFromCurrentImageContext();
|
||||
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
return modifiedImage;
|
||||
|
||||
};
|
||||
[self addSubnode:_avatarNode];
|
||||
|
||||
// Hairline cell separator
|
||||
_divider = [[ASDisplayNode alloc] init];
|
||||
[self updateDividerColor];
|
||||
[self addSubnode:_divider];
|
||||
|
||||
// Via
|
||||
if (_post.via != 0) {
|
||||
_viaNode = [[ASImageNode alloc] init];
|
||||
_viaNode.image = (_post.via == 1) ? [UIImage imageNamed:@"icon_ios.png"] : [UIImage imageNamed:@"icon_android.png"];
|
||||
[self addSubnode:_viaNode];
|
||||
}
|
||||
|
||||
// Bottom controls
|
||||
_likesNode = [[LikesNode alloc] initWithLikesCount:_post.likes];
|
||||
[self addSubnode:_likesNode];
|
||||
|
||||
_commentsNode = [[CommentsNode alloc] initWithCommentsCount:_post.comments];
|
||||
[self addSubnode:_commentsNode];
|
||||
|
||||
_optionsNode = [[ASImageNode alloc] init];
|
||||
_optionsNode.image = [UIImage imageNamed:@"icon_more"];
|
||||
[self addSubnode:_optionsNode];
|
||||
|
||||
for (ASDisplayNode *node in self.subnodes) {
|
||||
// ASTextNode with embedded links doesn't support layer backing
|
||||
if (node.supportsLayerBacking) {
|
||||
node.layerBacked = YES;
|
||||
}
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)updateDividerColor
|
||||
{
|
||||
/*
|
||||
* UITableViewCell traverses through all its descendant views and adjusts their background color accordingly
|
||||
* either to [UIColor clearColor], although potentially it could use the same color as the selection highlight itself.
|
||||
* After selection, the same trick is performed again in reverse, putting all the backgrounds back as they used to be.
|
||||
* But in our case, we don't want to have the background color disappearing so we reset it after highlighting or
|
||||
* selection is done.
|
||||
*/
|
||||
_divider.backgroundColor = PostNodeDividerColor;
|
||||
}
|
||||
|
||||
#pragma mark - ASDisplayNode
|
||||
|
||||
- (void)didLoad
|
||||
{
|
||||
// enable highlighting now that self.layer has loaded -- see ASHighlightOverlayLayer.h
|
||||
self.layer.as_allowsHighlightDrawing = YES;
|
||||
|
||||
[super didLoad];
|
||||
}
|
||||
|
||||
- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
|
||||
{
|
||||
// Flexible spacer between username and time
|
||||
ASLayoutSpec *spacer = [[ASLayoutSpec alloc] init];
|
||||
spacer.style.flexGrow = 1.0;
|
||||
|
||||
// Horizontal stack for name, username, via icon and time
|
||||
NSMutableArray *layoutSpecChildren = [@[_nameNode, _usernameNode, spacer] mutableCopy];
|
||||
if (_post.via != 0) {
|
||||
[layoutSpecChildren addObject:_viaNode];
|
||||
}
|
||||
[layoutSpecChildren addObject:_timeNode];
|
||||
|
||||
ASStackLayoutSpec *nameStack =
|
||||
[ASStackLayoutSpec
|
||||
stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal
|
||||
spacing:5.0
|
||||
justifyContent:ASStackLayoutJustifyContentStart
|
||||
alignItems:ASStackLayoutAlignItemsCenter
|
||||
children:layoutSpecChildren];
|
||||
nameStack.style.alignSelf = ASStackLayoutAlignSelfStretch;
|
||||
|
||||
// bottom controls horizontal stack
|
||||
ASStackLayoutSpec *controlsStack =
|
||||
[ASStackLayoutSpec
|
||||
stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal
|
||||
spacing:10
|
||||
justifyContent:ASStackLayoutJustifyContentStart
|
||||
alignItems:ASStackLayoutAlignItemsCenter
|
||||
children:@[_likesNode, _commentsNode, _optionsNode]];
|
||||
|
||||
// Add more gaps for control line
|
||||
controlsStack.style.spacingAfter = 3.0;
|
||||
controlsStack.style.spacingBefore = 3.0;
|
||||
|
||||
NSMutableArray *mainStackContent = [[NSMutableArray alloc] init];
|
||||
[mainStackContent addObject:nameStack];
|
||||
[mainStackContent addObject:_postNode];
|
||||
|
||||
|
||||
if (![_post.media isEqualToString:@""]){
|
||||
|
||||
// Only add the media node if an image is present
|
||||
if (_mediaNode.image != nil) {
|
||||
ASRatioLayoutSpec *imagePlace =
|
||||
[ASRatioLayoutSpec
|
||||
ratioLayoutSpecWithRatio:0.5
|
||||
child:_mediaNode];
|
||||
imagePlace.style.spacingAfter = 3.0;
|
||||
imagePlace.style.spacingBefore = 3.0;
|
||||
|
||||
[mainStackContent addObject:imagePlace];
|
||||
}
|
||||
}
|
||||
[mainStackContent addObject:controlsStack];
|
||||
|
||||
// Vertical spec of cell main content
|
||||
ASStackLayoutSpec *contentSpec =
|
||||
[ASStackLayoutSpec
|
||||
stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical
|
||||
spacing:8.0
|
||||
justifyContent:ASStackLayoutJustifyContentStart
|
||||
alignItems:ASStackLayoutAlignItemsStretch
|
||||
children:mainStackContent];
|
||||
contentSpec.style.flexShrink = 1.0;
|
||||
|
||||
// Horizontal spec for avatar
|
||||
ASStackLayoutSpec *avatarContentSpec =
|
||||
[ASStackLayoutSpec
|
||||
stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal
|
||||
spacing:8.0
|
||||
justifyContent:ASStackLayoutJustifyContentStart
|
||||
alignItems:ASStackLayoutAlignItemsStart
|
||||
children:@[_avatarNode, contentSpec]];
|
||||
|
||||
return [ASInsetLayoutSpec
|
||||
insetLayoutSpecWithInsets:UIEdgeInsetsMake(10, 10, 10, 10)
|
||||
child:avatarContentSpec];
|
||||
|
||||
}
|
||||
|
||||
- (void)layout
|
||||
{
|
||||
[super layout];
|
||||
|
||||
// Manually layout the divider.
|
||||
CGFloat pixelHeight = 1.0f / [[UIScreen mainScreen] scale];
|
||||
_divider.frame = CGRectMake(0.0f, 0.0f, self.calculatedSize.width, pixelHeight);
|
||||
}
|
||||
|
||||
#pragma mark - ASCellNode
|
||||
|
||||
- (void)setHighlighted:(BOOL)highlighted
|
||||
{
|
||||
[super setHighlighted:highlighted];
|
||||
|
||||
[self updateDividerColor];
|
||||
}
|
||||
|
||||
- (void)setSelected:(BOOL)selected
|
||||
{
|
||||
[super setSelected:selected];
|
||||
|
||||
[self updateDividerColor];
|
||||
}
|
||||
|
||||
#pragma mark - <ASTextNodeDelegate>
|
||||
|
||||
- (BOOL)textNode:(ASTextNode *)richTextNode shouldHighlightLinkAttribute:(NSString *)attribute value:(id)value atPoint:(CGPoint)point
|
||||
{
|
||||
// Opt into link highlighting -- tap and hold the link to try it! must enable highlighting on a layer, see -didLoad
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)textNode:(ASTextNode *)richTextNode tappedLinkAttribute:(NSString *)attribute value:(NSURL *)URL atPoint:(CGPoint)point textRange:(NSRange)textRange
|
||||
{
|
||||
// The node tapped a link, open it
|
||||
[[UIApplication sharedApplication] openURL:URL];
|
||||
}
|
||||
|
||||
#pragma mark - ASNetworkImageNodeDelegate methods.
|
||||
|
||||
- (void)imageNode:(ASNetworkImageNode *)imageNode didLoadImage:(UIImage *)image
|
||||
{
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,23 @@
|
||||
//
|
||||
// TextStyles.h
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface TextStyles : NSObject
|
||||
|
||||
+ (NSDictionary *)nameStyle;
|
||||
+ (NSDictionary *)usernameStyle;
|
||||
+ (NSDictionary *)timeStyle;
|
||||
+ (NSDictionary *)postStyle;
|
||||
+ (NSDictionary *)postLinkStyle;
|
||||
+ (NSDictionary *)cellControlStyle;
|
||||
+ (NSDictionary *)cellControlColoredStyle;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,71 @@
|
||||
//
|
||||
// TextStyles.m
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import "TextStyles.h"
|
||||
|
||||
@implementation TextStyles
|
||||
|
||||
+ (NSDictionary *)nameStyle
|
||||
{
|
||||
return @{
|
||||
NSFontAttributeName : [UIFont boldSystemFontOfSize:15.0],
|
||||
NSForegroundColorAttributeName: [UIColor blackColor]
|
||||
};
|
||||
}
|
||||
|
||||
+ (NSDictionary *)usernameStyle
|
||||
{
|
||||
return @{
|
||||
NSFontAttributeName : [UIFont systemFontOfSize:13.0],
|
||||
NSForegroundColorAttributeName: [UIColor lightGrayColor]
|
||||
};
|
||||
}
|
||||
|
||||
+ (NSDictionary *)timeStyle
|
||||
{
|
||||
return @{
|
||||
NSFontAttributeName : [UIFont systemFontOfSize:13.0],
|
||||
NSForegroundColorAttributeName: [UIColor grayColor]
|
||||
};
|
||||
}
|
||||
|
||||
+ (NSDictionary *)postStyle
|
||||
{
|
||||
return @{
|
||||
NSFontAttributeName : [UIFont systemFontOfSize:15.0],
|
||||
NSForegroundColorAttributeName: [UIColor blackColor]
|
||||
};
|
||||
}
|
||||
|
||||
+ (NSDictionary *)postLinkStyle
|
||||
{
|
||||
return @{
|
||||
NSFontAttributeName : [UIFont systemFontOfSize:15.0],
|
||||
NSForegroundColorAttributeName: [UIColor colorWithRed:59.0/255.0 green:89.0/255.0 blue:152.0/255.0 alpha:1.0],
|
||||
NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle)
|
||||
};
|
||||
}
|
||||
|
||||
+ (NSDictionary *)cellControlStyle
|
||||
{
|
||||
return @{
|
||||
NSFontAttributeName : [UIFont systemFontOfSize:13.0],
|
||||
NSForegroundColorAttributeName: [UIColor lightGrayColor]
|
||||
};
|
||||
}
|
||||
|
||||
+ (NSDictionary *)cellControlColoredStyle
|
||||
{
|
||||
return @{
|
||||
NSFontAttributeName : [UIFont systemFontOfSize:13.0],
|
||||
NSForegroundColorAttributeName: [UIColor colorWithRed:59.0/255.0 green:89.0/255.0 blue:152.0/255.0 alpha:1.0]
|
||||
};
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,13 @@
|
||||
//
|
||||
// ViewController.h
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import <AsyncDisplayKit/AsyncDisplayKit.h>
|
||||
|
||||
@interface ViewController : ASViewController
|
||||
@end
|
||||
@@ -0,0 +1,144 @@
|
||||
//
|
||||
// ViewController.m
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import "ViewController.h"
|
||||
#import "Post.h"
|
||||
#import "PostNode.h"
|
||||
|
||||
#import <AsyncDisplayKit/AsyncDisplayKit.h>
|
||||
#import <AsyncDisplayKit/ASAssert.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
@interface ViewController () <ASTableDataSource, ASTableDelegate>
|
||||
|
||||
@property (nonatomic, strong) ASTableNode *tableNode;
|
||||
@property (nonatomic, strong) NSMutableArray *socialAppDataSource;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - Lifecycle
|
||||
|
||||
@implementation ViewController
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
_tableNode = [[ASTableNode alloc] initWithStyle:UITableViewStylePlain];
|
||||
_tableNode.inverted = YES;
|
||||
self = [super initWithNode:_tableNode];
|
||||
|
||||
|
||||
if (self) {
|
||||
|
||||
_tableNode.delegate = self;
|
||||
_tableNode.dataSource = self;
|
||||
self.title = @"Timeline";
|
||||
|
||||
[self createSocialAppDataSource];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated
|
||||
{
|
||||
[super viewWillAppear:animated];
|
||||
CGFloat inset = [self topBarsHeight];
|
||||
self.tableNode.view.contentInset = UIEdgeInsetsMake(-inset, 0, inset, 0);
|
||||
self.tableNode.view.scrollIndicatorInsets = UIEdgeInsetsMake(-inset, 0, inset, 0);
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
// SocialAppNode has its own separator
|
||||
self.tableNode.view.separatorStyle = UITableViewCellSeparatorStyleNone;
|
||||
}
|
||||
|
||||
- (CGFloat)topBarsHeight
|
||||
{
|
||||
// No need to adjust if the edge isn't available
|
||||
if ((self.edgesForExtendedLayout & UIRectEdgeTop) == 0) {
|
||||
return 0.0;
|
||||
}
|
||||
return CGRectGetHeight(self.navigationController.navigationBar.frame) + CGRectGetHeight([UIApplication sharedApplication].statusBarFrame);
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Data Model
|
||||
|
||||
- (void)createSocialAppDataSource
|
||||
{
|
||||
_socialAppDataSource = [[NSMutableArray alloc] init];
|
||||
|
||||
Post *newPost = [[Post alloc] init];
|
||||
newPost.name = @"Apple Guy";
|
||||
newPost.username = @"@appleguy";
|
||||
newPost.photo = @"https://avatars1.githubusercontent.com/u/565251?v=3&s=96";
|
||||
newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.";
|
||||
newPost.time = @"3s";
|
||||
newPost.media = @"";
|
||||
newPost.via = 0;
|
||||
newPost.likes = arc4random_uniform(74);
|
||||
newPost.comments = arc4random_uniform(40);
|
||||
[_socialAppDataSource addObject:newPost];
|
||||
|
||||
newPost = [[Post alloc] init];
|
||||
newPost.name = @"Huy Nguyen";
|
||||
newPost.username = @"@nguyenhuy";
|
||||
newPost.photo = @"https://avatars2.githubusercontent.com/u/587874?v=3&s=96";
|
||||
newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
|
||||
newPost.time = @"1m";
|
||||
newPost.media = @"";
|
||||
newPost.via = 1;
|
||||
newPost.likes = arc4random_uniform(74);
|
||||
newPost.comments = arc4random_uniform(40);
|
||||
[_socialAppDataSource addObject:newPost];
|
||||
|
||||
newPost = [[Post alloc] init];
|
||||
newPost.name = @"Alex Long Name";
|
||||
newPost.username = @"@veryyyylongusername";
|
||||
newPost.photo = @"https://avatars1.githubusercontent.com/u/8086633?v=3&s=96";
|
||||
newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
|
||||
newPost.time = @"3:02";
|
||||
newPost.media = @"http://www.ngmag.ru/upload/iblock/f93/f9390efc34151456598077c1ba44a94d.jpg";
|
||||
newPost.via = 2;
|
||||
newPost.likes = arc4random_uniform(74);
|
||||
newPost.comments = arc4random_uniform(40);
|
||||
[_socialAppDataSource addObject:newPost];
|
||||
|
||||
newPost = [[Post alloc] init];
|
||||
newPost.name = @"Vitaly Baev";
|
||||
newPost.username = @"@vitalybaev";
|
||||
newPost.photo = @"https://avatars0.githubusercontent.com/u/724423?v=3&s=96";
|
||||
newPost.post = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. https://github.com/facebook/AsyncDisplayKit Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
|
||||
newPost.time = @"yesterday";
|
||||
newPost.media = @"";
|
||||
newPost.via = 1;
|
||||
newPost.likes = arc4random_uniform(74);
|
||||
newPost.comments = arc4random_uniform(40);
|
||||
[_socialAppDataSource addObject:newPost];
|
||||
}
|
||||
|
||||
#pragma mark - ASTableNode
|
||||
|
||||
- (ASCellNodeBlock)tableNode:(ASTableNode *)tableNode nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
Post *post = self.socialAppDataSource[indexPath.row];
|
||||
return ^{
|
||||
return [[PostNode alloc] initWithPost:post];
|
||||
};
|
||||
}
|
||||
|
||||
- (NSInteger)tableNode:(ASTableNode *)tableNode numberOfRowsInSection:(NSInteger)section
|
||||
{
|
||||
return self.socialAppDataSource.count;
|
||||
}
|
||||
|
||||
@end
|
||||
|
After Width: | Height: | Size: 387 B |
|
After Width: | Height: | Size: 733 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 358 B |
|
After Width: | Height: | Size: 490 B |
|
After Width: | Height: | Size: 340 B |
|
After Width: | Height: | Size: 706 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 348 B |
|
After Width: | Height: | Size: 728 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 400 B |
|
After Width: | Height: | Size: 781 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 205 B |
|
After Width: | Height: | Size: 418 B |
|
After Width: | Height: | Size: 594 B |
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// main.m
|
||||
// Texture
|
||||
//
|
||||
// Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
|
||||
// Changes after 4/13/2017 are: Copyright (c) Pinterest, Inc. All rights reserved.
|
||||
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "AppDelegate.h"
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
@autoreleasepool {
|
||||
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
||||
}
|
||||
}
|
||||