diff --git a/examples/ASDKgram/Sample.xcodeproj/project.pbxproj b/examples/ASDKgram/Sample.xcodeproj/project.pbxproj index b6a0abded9..afb3882a4d 100644 --- a/examples/ASDKgram/Sample.xcodeproj/project.pbxproj +++ b/examples/ASDKgram/Sample.xcodeproj/project.pbxproj @@ -19,21 +19,16 @@ 768843831CAA37EF00D8629E /* CommentsNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 7688436B1CAA37EF00D8629E /* CommentsNode.m */; }; 768843841CAA37EF00D8629E /* CommentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7688436C1CAA37EF00D8629E /* CommentView.m */; }; 768843851CAA37EF00D8629E /* ImageURLModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 7688436D1CAA37EF00D8629E /* ImageURLModel.m */; }; - 768843861CAA37EF00D8629E /* LikersViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7688436E1CAA37EF00D8629E /* LikersViewController.m */; }; - 768843871CAA37EF00D8629E /* LocationCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7688436F1CAA37EF00D8629E /* LocationCollectionViewController.m */; }; 768843881CAA37EF00D8629E /* LocationModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 768843701CAA37EF00D8629E /* LocationModel.m */; }; 768843891CAA37EF00D8629E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 768843711CAA37EF00D8629E /* main.m */; }; - 7688438A1CAA37EF00D8629E /* MoreInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 768843721CAA37EF00D8629E /* MoreInfoViewController.m */; }; 7688438B1CAA37EF00D8629E /* PhotoCellNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 768843731CAA37EF00D8629E /* PhotoCellNode.m */; }; 7688438C1CAA37EF00D8629E /* PhotoCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 768843741CAA37EF00D8629E /* PhotoCollectionViewCell.m */; }; 7688438D1CAA37EF00D8629E /* PhotoFeedModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 768843751CAA37EF00D8629E /* PhotoFeedModel.m */; }; 7688438E1CAA37EF00D8629E /* PhotoFeedNodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 768843761CAA37EF00D8629E /* PhotoFeedNodeController.m */; }; - 7688438F1CAA37EF00D8629E /* PhotoMapViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 768843771CAA37EF00D8629E /* PhotoMapViewController.m */; }; 768843901CAA37EF00D8629E /* PhotoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 768843781CAA37EF00D8629E /* PhotoModel.m */; }; 768843911CAA37EF00D8629E /* PhotoTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 768843791CAA37EF00D8629E /* PhotoTableViewCell.m */; }; 768843921CAA37EF00D8629E /* PhotoTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7688437A1CAA37EF00D8629E /* PhotoTableViewController.m */; }; 768843931CAA37EF00D8629E /* UserModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 7688437B1CAA37EF00D8629E /* UserModel.m */; }; - 768843941CAA37EF00D8629E /* UserProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7688437C1CAA37EF00D8629E /* UserProfileViewController.m */; }; 768843951CAA37EF00D8629E /* UserRowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7688437D1CAA37EF00D8629E /* UserRowView.m */; }; 768843961CAA37EF00D8629E /* Utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 7688437E1CAA37EF00D8629E /* Utilities.m */; }; /* End PBXBuildFile section */ @@ -53,20 +48,15 @@ 768843541CAA37EF00D8629E /* CommentsNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommentsNode.h; sourceTree = ""; }; 768843551CAA37EF00D8629E /* CommentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommentView.h; sourceTree = ""; }; 768843561CAA37EF00D8629E /* ImageURLModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageURLModel.h; sourceTree = ""; }; - 768843571CAA37EF00D8629E /* LikersViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LikersViewController.h; sourceTree = ""; }; - 768843581CAA37EF00D8629E /* LocationCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocationCollectionViewController.h; sourceTree = ""; }; 768843591CAA37EF00D8629E /* LocationModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocationModel.h; sourceTree = ""; }; - 7688435A1CAA37EF00D8629E /* MoreInfoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoreInfoViewController.h; sourceTree = ""; }; 7688435B1CAA37EF00D8629E /* PhotoCellNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoCellNode.h; sourceTree = ""; }; 7688435C1CAA37EF00D8629E /* PhotoCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoCollectionViewCell.h; sourceTree = ""; }; 7688435D1CAA37EF00D8629E /* PhotoFeedModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoFeedModel.h; sourceTree = ""; }; 7688435E1CAA37EF00D8629E /* PhotoFeedNodeController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoFeedNodeController.h; sourceTree = ""; }; - 7688435F1CAA37EF00D8629E /* PhotoMapViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoMapViewController.h; sourceTree = ""; }; 768843601CAA37EF00D8629E /* PhotoModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoModel.h; sourceTree = ""; }; 768843611CAA37EF00D8629E /* PhotoTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoTableViewCell.h; sourceTree = ""; }; 768843621CAA37EF00D8629E /* PhotoTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoTableViewController.h; sourceTree = ""; }; 768843631CAA37EF00D8629E /* UserModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserModel.h; sourceTree = ""; }; - 768843641CAA37EF00D8629E /* UserProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserProfileViewController.h; sourceTree = ""; }; 768843651CAA37EF00D8629E /* UserRowView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserRowView.h; sourceTree = ""; }; 768843661CAA37EF00D8629E /* Utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utilities.h; sourceTree = ""; }; 768843671CAA37EF00D8629E /* Flickrgram.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Flickrgram.pch; sourceTree = ""; }; @@ -76,21 +66,16 @@ 7688436B1CAA37EF00D8629E /* CommentsNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommentsNode.m; sourceTree = ""; }; 7688436C1CAA37EF00D8629E /* CommentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommentView.m; sourceTree = ""; }; 7688436D1CAA37EF00D8629E /* ImageURLModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageURLModel.m; sourceTree = ""; }; - 7688436E1CAA37EF00D8629E /* LikersViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LikersViewController.m; sourceTree = ""; }; - 7688436F1CAA37EF00D8629E /* LocationCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocationCollectionViewController.m; sourceTree = ""; }; 768843701CAA37EF00D8629E /* LocationModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocationModel.m; sourceTree = ""; }; 768843711CAA37EF00D8629E /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 768843721CAA37EF00D8629E /* MoreInfoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MoreInfoViewController.m; sourceTree = ""; }; 768843731CAA37EF00D8629E /* PhotoCellNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoCellNode.m; sourceTree = ""; }; 768843741CAA37EF00D8629E /* PhotoCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoCollectionViewCell.m; sourceTree = ""; }; 768843751CAA37EF00D8629E /* PhotoFeedModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoFeedModel.m; sourceTree = ""; }; 768843761CAA37EF00D8629E /* PhotoFeedNodeController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoFeedNodeController.m; sourceTree = ""; }; - 768843771CAA37EF00D8629E /* PhotoMapViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoMapViewController.m; sourceTree = ""; }; 768843781CAA37EF00D8629E /* PhotoModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoModel.m; sourceTree = ""; }; 768843791CAA37EF00D8629E /* PhotoTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoTableViewCell.m; sourceTree = ""; }; 7688437A1CAA37EF00D8629E /* PhotoTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoTableViewController.m; sourceTree = ""; }; 7688437B1CAA37EF00D8629E /* UserModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserModel.m; sourceTree = ""; }; - 7688437C1CAA37EF00D8629E /* UserProfileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserProfileViewController.m; sourceTree = ""; }; 7688437D1CAA37EF00D8629E /* UserRowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserRowView.m; sourceTree = ""; }; 7688437E1CAA37EF00D8629E /* Utilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Utilities.m; sourceTree = ""; }; 7688437F1CAA37EF00D8629E /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -133,54 +118,11 @@ 05E2128319D4DB510098F589 /* Sample */ = { isa = PBXGroup; children = ( - 767A5F121CAA3C66004CDA8D /* Assets.xcassets */, 768843511CAA37EF00D8629E /* AppDelegate.h */, - 768843521CAA37EF00D8629E /* CommentFeedModel.h */, - 768843531CAA37EF00D8629E /* CommentModel.h */, - 768843541CAA37EF00D8629E /* CommentsNode.h */, - 768843551CAA37EF00D8629E /* CommentView.h */, - 768843561CAA37EF00D8629E /* ImageURLModel.h */, - 768843571CAA37EF00D8629E /* LikersViewController.h */, - 768843581CAA37EF00D8629E /* LocationCollectionViewController.h */, - 768843591CAA37EF00D8629E /* LocationModel.h */, - 7688435A1CAA37EF00D8629E /* MoreInfoViewController.h */, - 7688435B1CAA37EF00D8629E /* PhotoCellNode.h */, - 7688435C1CAA37EF00D8629E /* PhotoCollectionViewCell.h */, - 7688435D1CAA37EF00D8629E /* PhotoFeedModel.h */, - 7688435E1CAA37EF00D8629E /* PhotoFeedNodeController.h */, - 7688435F1CAA37EF00D8629E /* PhotoMapViewController.h */, - 768843601CAA37EF00D8629E /* PhotoModel.h */, - 768843611CAA37EF00D8629E /* PhotoTableViewCell.h */, - 768843621CAA37EF00D8629E /* PhotoTableViewController.h */, - 768843631CAA37EF00D8629E /* UserModel.h */, - 768843641CAA37EF00D8629E /* UserProfileViewController.h */, - 768843651CAA37EF00D8629E /* UserRowView.h */, - 768843661CAA37EF00D8629E /* Utilities.h */, - 768843671CAA37EF00D8629E /* Flickrgram.pch */, 768843681CAA37EF00D8629E /* AppDelegate.m */, - 768843691CAA37EF00D8629E /* CommentFeedModel.m */, - 7688436A1CAA37EF00D8629E /* CommentModel.m */, - 7688436B1CAA37EF00D8629E /* CommentsNode.m */, - 7688436C1CAA37EF00D8629E /* CommentView.m */, - 7688436D1CAA37EF00D8629E /* ImageURLModel.m */, - 7688436E1CAA37EF00D8629E /* LikersViewController.m */, - 7688436F1CAA37EF00D8629E /* LocationCollectionViewController.m */, - 768843701CAA37EF00D8629E /* LocationModel.m */, - 768843711CAA37EF00D8629E /* main.m */, - 768843721CAA37EF00D8629E /* MoreInfoViewController.m */, - 768843731CAA37EF00D8629E /* PhotoCellNode.m */, - 768843741CAA37EF00D8629E /* PhotoCollectionViewCell.m */, - 768843751CAA37EF00D8629E /* PhotoFeedModel.m */, - 768843761CAA37EF00D8629E /* PhotoFeedNodeController.m */, - 768843771CAA37EF00D8629E /* PhotoMapViewController.m */, - 768843781CAA37EF00D8629E /* PhotoModel.m */, - 768843791CAA37EF00D8629E /* PhotoTableViewCell.m */, - 7688437A1CAA37EF00D8629E /* PhotoTableViewController.m */, - 7688437B1CAA37EF00D8629E /* UserModel.m */, - 7688437C1CAA37EF00D8629E /* UserProfileViewController.m */, - 7688437D1CAA37EF00D8629E /* UserRowView.m */, - 7688437E1CAA37EF00D8629E /* Utilities.m */, - 7688437F1CAA37EF00D8629E /* Info.plist */, + 767A5F141CAA3D8A004CDA8D /* Controller */, + 767A5F181CAA3DB0004CDA8D /* View */, + 767A5F171CAA3DA1004CDA8D /* Model */, 05E2128419D4DB510098F589 /* Supporting Files */, ); path = Sample; @@ -189,6 +131,10 @@ 05E2128419D4DB510098F589 /* Supporting Files */ = { isa = PBXGroup; children = ( + 768843671CAA37EF00D8629E /* Flickrgram.pch */, + 7688437F1CAA37EF00D8629E /* Info.plist */, + 768843711CAA37EF00D8629E /* main.m */, + 767A5F121CAA3C66004CDA8D /* Assets.xcassets */, 767A5F101CAA3BFE004CDA8D /* tabBarIcons */, 0585427F19D4DBE100606EA6 /* Default-568h@2x.png */, 6C2C82AA19EE274300767484 /* Default-667h@2x.png */, @@ -214,6 +160,91 @@ name = Pods; sourceTree = ""; }; + 767A5F141CAA3D8A004CDA8D /* Controller */ = { + isa = PBXGroup; + children = ( + 767A5F161CAA3D96004CDA8D /* UIKit */, + 767A5F151CAA3D90004CDA8D /* ASDK */, + ); + name = Controller; + sourceTree = ""; + }; + 767A5F151CAA3D90004CDA8D /* ASDK */ = { + isa = PBXGroup; + children = ( + 7688435E1CAA37EF00D8629E /* PhotoFeedNodeController.h */, + 768843761CAA37EF00D8629E /* PhotoFeedNodeController.m */, + ); + name = ASDK; + sourceTree = ""; + }; + 767A5F161CAA3D96004CDA8D /* UIKit */ = { + isa = PBXGroup; + children = ( + 768843621CAA37EF00D8629E /* PhotoTableViewController.h */, + 7688437A1CAA37EF00D8629E /* PhotoTableViewController.m */, + ); + name = UIKit; + sourceTree = ""; + }; + 767A5F171CAA3DA1004CDA8D /* Model */ = { + isa = PBXGroup; + children = ( + 7688435D1CAA37EF00D8629E /* PhotoFeedModel.h */, + 768843751CAA37EF00D8629E /* PhotoFeedModel.m */, + 768843601CAA37EF00D8629E /* PhotoModel.h */, + 768843781CAA37EF00D8629E /* PhotoModel.m */, + 768843561CAA37EF00D8629E /* ImageURLModel.h */, + 7688436D1CAA37EF00D8629E /* ImageURLModel.m */, + 768843521CAA37EF00D8629E /* CommentFeedModel.h */, + 768843691CAA37EF00D8629E /* CommentFeedModel.m */, + 768843531CAA37EF00D8629E /* CommentModel.h */, + 7688436A1CAA37EF00D8629E /* CommentModel.m */, + 768843631CAA37EF00D8629E /* UserModel.h */, + 7688437B1CAA37EF00D8629E /* UserModel.m */, + 768843591CAA37EF00D8629E /* LocationModel.h */, + 768843701CAA37EF00D8629E /* LocationModel.m */, + 768843661CAA37EF00D8629E /* Utilities.h */, + 7688437E1CAA37EF00D8629E /* Utilities.m */, + ); + name = Model; + sourceTree = ""; + }; + 767A5F181CAA3DB0004CDA8D /* View */ = { + isa = PBXGroup; + children = ( + 767A5F191CAA3DB9004CDA8D /* UIKit */, + 767A5F1A1CAA3DBF004CDA8D /* ASDK */, + ); + name = View; + sourceTree = ""; + }; + 767A5F191CAA3DB9004CDA8D /* UIKit */ = { + isa = PBXGroup; + children = ( + 768843611CAA37EF00D8629E /* PhotoTableViewCell.h */, + 768843791CAA37EF00D8629E /* PhotoTableViewCell.m */, + 7688435C1CAA37EF00D8629E /* PhotoCollectionViewCell.h */, + 768843741CAA37EF00D8629E /* PhotoCollectionViewCell.m */, + 768843551CAA37EF00D8629E /* CommentView.h */, + 7688436C1CAA37EF00D8629E /* CommentView.m */, + 768843651CAA37EF00D8629E /* UserRowView.h */, + 7688437D1CAA37EF00D8629E /* UserRowView.m */, + ); + name = UIKit; + sourceTree = ""; + }; + 767A5F1A1CAA3DBF004CDA8D /* ASDK */ = { + isa = PBXGroup; + children = ( + 7688435B1CAA37EF00D8629E /* PhotoCellNode.h */, + 768843731CAA37EF00D8629E /* PhotoCellNode.m */, + 768843541CAA37EF00D8629E /* CommentsNode.h */, + 7688436B1CAA37EF00D8629E /* CommentsNode.m */, + ); + name = ASDK; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -341,11 +372,9 @@ 768843891CAA37EF00D8629E /* main.m in Sources */, 7688438C1CAA37EF00D8629E /* PhotoCollectionViewCell.m in Sources */, 768843921CAA37EF00D8629E /* PhotoTableViewController.m in Sources */, - 7688438A1CAA37EF00D8629E /* MoreInfoViewController.m in Sources */, 768843821CAA37EF00D8629E /* CommentModel.m in Sources */, 768843831CAA37EF00D8629E /* CommentsNode.m in Sources */, 768843961CAA37EF00D8629E /* Utilities.m in Sources */, - 768843941CAA37EF00D8629E /* UserProfileViewController.m in Sources */, 768843931CAA37EF00D8629E /* UserModel.m in Sources */, 768843801CAA37EF00D8629E /* AppDelegate.m in Sources */, 768843811CAA37EF00D8629E /* CommentFeedModel.m in Sources */, @@ -353,10 +382,7 @@ 768843841CAA37EF00D8629E /* CommentView.m in Sources */, 768843951CAA37EF00D8629E /* UserRowView.m in Sources */, 768843881CAA37EF00D8629E /* LocationModel.m in Sources */, - 7688438F1CAA37EF00D8629E /* PhotoMapViewController.m in Sources */, - 768843871CAA37EF00D8629E /* LocationCollectionViewController.m in Sources */, 768843901CAA37EF00D8629E /* PhotoModel.m in Sources */, - 768843861CAA37EF00D8629E /* LikersViewController.m in Sources */, 768843911CAA37EF00D8629E /* PhotoTableViewCell.m in Sources */, 7688438B1CAA37EF00D8629E /* PhotoCellNode.m in Sources */, 7688438D1CAA37EF00D8629E /* PhotoFeedModel.m in Sources */, @@ -452,7 +478,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = Sample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.facebook.AsyncDisplayKit.Sample; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -469,7 +495,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = Sample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.facebook.AsyncDisplayKit.Sample; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/examples/ASDKgram/Sample/AppDelegate.m b/examples/ASDKgram/Sample/AppDelegate.m index 249ab4f396..123a398d46 100644 --- a/examples/ASDKgram/Sample/AppDelegate.m +++ b/examples/ASDKgram/Sample/AppDelegate.m @@ -9,9 +9,7 @@ #import "AppDelegate.h" #import "PhotoTableViewController.h" #import "PhotoFeedNodeController.h" -#import "MoreInfoViewController.h" #import "Utilities.h" -//#import "KMCGeigerCounter.h" #import "AsyncDisplayKit+Debug.h" @implementation AppDelegate @@ -45,13 +43,6 @@ //http://stackoverflow.com/questions/19022210/preferredstatusbarstyle-isnt-called/19513714#19513714 uikitHomeFeedNavCtrl.navigationBar.barStyle = UIBarStyleBlack; asdkHomeFeedNavCtrl.navigationBar.barStyle = UIBarStyleBlack; - - - // create Stats viewController & navController -// MoreInfoViewController *VC = [[MoreInfoViewController alloc] init]; -// VC.view.backgroundColor = [UIColor whiteColor]; -// UINavigationController *statsNavController = [[UINavigationController alloc] initWithRootViewController:VC]; -// statsNavController.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMore tag:0]; // configure UITabBarController and add viewControllers tabBarController.viewControllers = @[uikitHomeFeedNavCtrl, asdkHomeFeedNavCtrl]; diff --git a/examples/ASDKgram/Sample/Assets.xcassets/crosshairs.imageset/Contents.json b/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/crosshairs.imageset/Contents.json similarity index 100% rename from examples/ASDKgram/Sample/Assets.xcassets/crosshairs.imageset/Contents.json rename to examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/crosshairs.imageset/Contents.json diff --git a/examples/ASDKgram/Sample/Assets.xcassets/crosshairs.imageset/crosshair.png b/examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/crosshairs.imageset/crosshair.png similarity index 100% rename from examples/ASDKgram/Sample/Assets.xcassets/crosshairs.imageset/crosshair.png rename to examples/ASDKgram/Sample/Assets.xcassets/Tab Bar Icons/crosshairs.imageset/crosshair.png diff --git a/examples/ASDKgram/Sample/LikersViewController.h b/examples/ASDKgram/Sample/LikersViewController.h deleted file mode 100644 index c8755cf8c6..0000000000 --- a/examples/ASDKgram/Sample/LikersViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// LikersViewController.h -// Flickrgram -// -// Created by Hannah Troisi on 3/14/16. -// Copyright © 2016 Hannah Troisi. All rights reserved. -// - -#import -#import "PhotoModel.h" - -@interface LikersViewController : UIViewController - -- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_UNAVAILABLE; -- (instancetype)initWithPhoto:(PhotoModel *)photo NS_DESIGNATED_INITIALIZER; - -@end diff --git a/examples/ASDKgram/Sample/LikersViewController.m b/examples/ASDKgram/Sample/LikersViewController.m deleted file mode 100644 index 0bad73a4ff..0000000000 --- a/examples/ASDKgram/Sample/LikersViewController.m +++ /dev/null @@ -1,110 +0,0 @@ -// -// LikersViewController.m -// Flickrgram -// -// Created by Hannah Troisi on 3/14/16. -// Copyright © 2016 Hannah Troisi. All rights reserved. -// - -#import "LikersViewController.h" -#import "UserRowView.h" -#import "CommentFeedModel.h" - -#define AUTO_TAIL_LOADING_NUM_SCREENFULS 1.0 - -@interface LikersViewController () - -@end - -@implementation LikersViewController -{ - PhotoModel *_photo; - UITableView *_tableView; -} - - -#pragma mark - Lifecycle - -- (instancetype)initWithPhoto:(PhotoModel *)photo -{ - self = [super initWithNibName:nil bundle:nil]; - - if (self) { - - self.navigationItem.title = @"LIKERS"; - - _photo = photo; - - _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; - _tableView.allowsSelection = NO; - _tableView.dataSource = self; - _tableView.delegate = self; - - [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"userRowCell"]; - } - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.view addSubview:_tableView]; - - self.view.backgroundColor = [UIColor whiteColor]; -} - -- (void)viewWillLayoutSubviews -{ - [super viewWillLayoutSubviews]; - - self.navigationController.hidesBarsOnSwipe = NO; // FIXME: why won't this work? - - _tableView.frame = self.view.bounds; -} - - -#pragma mark - UITableViewDelegate - --(void)scrollViewDidScroll:(UIScrollView *)scrollView -{ - CGFloat currentOffSetY = scrollView.contentOffset.y; - CGFloat contentHeight = scrollView.contentSize.height; - CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height; - - // automatic tail loading - CGFloat screenfullsBeforeBottom = (contentHeight - currentOffSetY) / screenHeight; - if (screenfullsBeforeBottom < AUTO_TAIL_LOADING_NUM_SCREENFULS) { -// NSLog(@"AUTOMATIC TAIL LOADING BEGIN"); - [_photo.commentFeed requestPageWithCompletionBlock:^(NSArray *newComments) { // FIXME: add number of items to load - [_tableView reloadData]; //FIXME: insert - [self.view setNeedsLayout]; - }]; - } -} - - -#pragma mark - UITableViewDataSource methods - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return [_photo.commentFeed numberOfItemsInFeed]; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:@"userRowCell"]; - - if ([[cell.contentView subviews] count] == 0) { - UserRowView *userRowView = [[UserRowView alloc] initWithFrame:cell.frame withPhotoFeedModelType:UserRowViewTypeComments]; - [cell.contentView addSubview:userRowView]; - } - - CommentModel *comment = [_photo.commentFeed objectAtIndex:indexPath.row]; - [[[cell.contentView subviews] objectAtIndex:0] updateWithCommentModel:comment]; - - return cell; -} - -@end diff --git a/examples/ASDKgram/Sample/LocationCollectionViewController.h b/examples/ASDKgram/Sample/LocationCollectionViewController.h deleted file mode 100644 index e5eef25965..0000000000 --- a/examples/ASDKgram/Sample/LocationCollectionViewController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// LocationCollectionViewController.h -// Flickrgram -// -// Created by Hannah Troisi on 2/24/16. -// Copyright © 2016 Hannah Troisi. All rights reserved. -// - -#import -#import - -@interface LocationCollectionViewController : UICollectionViewController - - -- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout - coordinates:(CLLocationCoordinate2D)coordiantes NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout NS_UNAVAILABLE; -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_UNAVAILABLE; -- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; - -@end diff --git a/examples/ASDKgram/Sample/LocationCollectionViewController.m b/examples/ASDKgram/Sample/LocationCollectionViewController.m deleted file mode 100644 index eb4f895f38..0000000000 --- a/examples/ASDKgram/Sample/LocationCollectionViewController.m +++ /dev/null @@ -1,130 +0,0 @@ -// -// LocationCollectionViewController.m -// Flickrgram -// -// Created by Hannah Troisi on 2/24/16. -// Copyright © 2016 Hannah Troisi. All rights reserved. -// - -#import "LocationCollectionViewController.h" -#import "PhotoCollectionViewCell.h" -#import "PhotoFeedModel.h" -#import -#import - - -#define MAP_HEIGHT_VERTICAL_SCREEN_RATIO 0.3 - -@implementation LocationCollectionViewController -{ - CLLocationCoordinate2D _coordinates; - MKMapView *_mapView; - PhotoFeedModel *_photoFeed; -} - - -#pragma mark - Lifecycle - -- (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout - coordinates:(CLLocationCoordinate2D)coordiantes - -{ - self = [super initWithCollectionViewLayout:layout]; - - if (self) { - - CGRect screenRect = [[UIScreen mainScreen] bounds]; - CGFloat screenScale = [[UIScreen mainScreen] scale]; - CGSize imageSize = CGSizeMake(screenRect.size.width * screenScale / 3.0, screenRect.size.width * screenScale / 3.0); - - _photoFeed = [[PhotoFeedModel alloc] initWithPhotoFeedModelType:PhotoFeedModelTypeLocation imageSize:imageSize]; - [_photoFeed updatePhotoFeedModelTypeLocationCoordinates:coordiantes radiusInMiles:10]; - [_photoFeed refreshFeedWithCompletionBlock:^(NSArray *newPhotos) { - [self.collectionView reloadData]; - } numResultsToReturn:21]; - - // set collection view dataSource and delegate - self.collectionView.delegate = self; - self.collectionView.dataSource = self; - self.collectionView.allowsSelection = NO; - self.collectionView.backgroundColor = [UIColor whiteColor]; - - // register cell class - [self.collectionView registerClass:[PhotoCollectionViewCell class] forCellWithReuseIdentifier:@"photo"]; - [self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView"]; - - // configure MKMapView & add as subview - _mapView = [[MKMapView alloc] init]; - _mapView.showsUserLocation = YES; - - // set coordinates - _coordinates = coordiantes; - - } - - return self; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - // add annotation for coordinates - MKPointAnnotation *photoLocationAnnotation = [[MKPointAnnotation alloc] init]; - photoLocationAnnotation.coordinate = _coordinates; - [_mapView addAnnotation:photoLocationAnnotation]; - - // center map on photo pin - [_mapView setCenterCoordinate:_coordinates]; - - // set map span and region - MKCoordinateSpan span = MKCoordinateSpanMake(5, 5); - MKCoordinateRegion region = MKCoordinateRegionMake(_coordinates, span); - [_mapView setRegion:region animated:NO]; -} - -- (void)viewWillLayoutSubviews -{ - [super viewWillLayoutSubviews]; -} - -#pragma mark - UICollectionViewDataSource - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section -{ - return [_photoFeed numberOfItemsInFeed]; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath -{ - // dequeue a reusable cell - PhotoCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"photo" forIndexPath:indexPath]; - - // configure the cell for the appropriate photo - [cell updateCellWithPhotoObject:[_photoFeed objectAtIndex:indexPath.row]]; - - return cell; -} - -- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath -{ - UICollectionReusableView *reusableview = nil; - - if (kind == UICollectionElementKindSectionHeader) { - UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView" forIndexPath:indexPath]; - - if (!headerView) { - headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView" forIndexPath:indexPath]; - } - - _mapView.frame = headerView.frame; - [headerView addSubview:_mapView]; - - reusableview = headerView; - } - - return reusableview; -} - - -@end diff --git a/examples/ASDKgram/Sample/MoreInfoViewController.h b/examples/ASDKgram/Sample/MoreInfoViewController.h deleted file mode 100644 index 18898c6936..0000000000 --- a/examples/ASDKgram/Sample/MoreInfoViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MoreInfoViewController.h -// Flickrgram -// -// Created by Hannah Troisi on 3/21/16. -// Copyright © 2016 Hannah Troisi. All rights reserved. -// - -#import - -@interface MoreInfoViewController : ASViewController - -@end diff --git a/examples/ASDKgram/Sample/MoreInfoViewController.m b/examples/ASDKgram/Sample/MoreInfoViewController.m deleted file mode 100644 index 69e9f7d743..0000000000 --- a/examples/ASDKgram/Sample/MoreInfoViewController.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// MoreInfoViewController.m -// Flickrgram -// -// Created by Hannah Troisi on 3/21/16. -// Copyright © 2016 Hannah Troisi. All rights reserved. -// - -#import "MoreInfoViewController.h" - -@implementation MoreInfoViewController -{ - ASTextNode *_textNode; -} - -//- (instancetype)initWithNode:(DisplayNodeType)node NS_DESIGNATED_INITIALIZER; -// -//{ -// self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; -// -// if (self) { -// -// self.navigationItem.title = @"500pixgram"; -// [self.navigationController setNavigationBarHidden:YES]; -// -// _textNode = [[ASTextNode alloc] init]; -// -// } -// -// return self; -//} - - - -@end diff --git a/examples/ASDKgram/Sample/PhotoCellNode.m b/examples/ASDKgram/Sample/PhotoCellNode.m index 94d6218d0b..c0a8a2eac5 100644 --- a/examples/ASDKgram/Sample/PhotoCellNode.m +++ b/examples/ASDKgram/Sample/PhotoCellNode.m @@ -73,8 +73,7 @@ // make sure to use _photoModel instance variable as photo may change when cell is reused, // where as local variable will never change if (locationModel == _photoModel.location) { - _photoLocationLabel.attributedString = [[NSAttributedString alloc] initWithString:@"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"]; -// _photoLocationLabel.attributedString = [photo locationAttributedStringWithFontSize:FONT_SIZE]; + _photoLocationLabel.attributedString = [photo locationAttributedStringWithFontSize:FONT_SIZE]; [self setNeedsLayout]; } }]; @@ -98,20 +97,6 @@ // instead of adding everything addSubnode: self.usesImplicitHierarchyManagement = YES; -// UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(cellWasLongPressed:)]; -// [self.view addGestureRecognizer:lpgr]; -// -// // tap gesture recognizer -// UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellWasTapped:)]; -// [self.view addGestureRecognizer:tgr]; - - [_userAvatarImageView addTarget:self action:@selector(doNothing) forControlEvents:ASControlNodeEventTouchUpInside]; - [_photoLikesLabel addTarget:self action:@selector(doNothing) forControlEvents:ASControlNodeEventTouchUpInside]; - [_userNameLabel addTarget:self action:@selector(doNothing) forControlEvents:ASControlNodeEventTouchUpInside]; - _userAvatarImageView.hitTestSlop = UIEdgeInsetsMake(-10, -10, -10, -20); - _photoLikesLabel.hitTestSlop = UIEdgeInsetsMake(5, 5, 5, 5); - - #if DEBUG_PHOTOCELL_LAYOUT _userAvatarImageView.backgroundColor = [UIColor greenColor]; _userNameLabel.backgroundColor = [UIColor greenColor]; diff --git a/examples/ASDKgram/Sample/PhotoFeedModel.m b/examples/ASDKgram/Sample/PhotoFeedModel.m index 82aed9bd25..de351e1584 100644 --- a/examples/ASDKgram/Sample/PhotoFeedModel.m +++ b/examples/ASDKgram/Sample/PhotoFeedModel.m @@ -10,11 +10,12 @@ #import "ImageURLModel.h" #define fiveHundredPX_ENDPOINT_HOST @"https://api.500px.com/v1/" -#define fiveHundredPX_ENDPOINT_POPULAR @"photos?feature=popular&sort=rating&image_size=3&include_store=store_download&include_states=voted" +#define fiveHundredPX_ENDPOINT_POPULAR @"photos?feature=popular&exclude=Nude,People,Fashion&sort=rating&image_size=3&include_store=store_download&include_states=voted" #define fiveHundredPX_ENDPOINT_SEARCH @"photos/search?geo=" //latitude,longitude,radius #define fiveHundredPX_ENDPOINT_USER @"photos?user_id=" #define fiveHundredPX_CONSUMER_KEY_PARAM @"&consumer_key=Fi13GVb8g53sGvHICzlram7QkKOlSDmAmp9s9aqC" +// &exclude='Nude,People' @implementation PhotoFeedModel { diff --git a/examples/ASDKgram/Sample/PhotoFeedNodeController.m b/examples/ASDKgram/Sample/PhotoFeedNodeController.m index 0e9d99434f..b5c7de33c5 100644 --- a/examples/ASDKgram/Sample/PhotoFeedNodeController.m +++ b/examples/ASDKgram/Sample/PhotoFeedNodeController.m @@ -10,15 +10,13 @@ #import "PhotoModel.h" #import "PhotoCellNode.h" #import "PhotoTableViewCell.h" -#import "UserProfileViewController.h" -#import "LocationCollectionViewController.h" #import "PhotoFeedModel.h" #import #import "Utilities.h" #define AUTO_TAIL_LOADING_NUM_SCREENFULS 2.5 -@interface PhotoFeedNodeController () +@interface PhotoFeedNodeController () @end @implementation PhotoFeedNodeController @@ -37,7 +35,7 @@ if (self) { - self.navigationItem.title = @"500pixgram"; + self.navigationItem.title = @"ASDK"; [self.navigationController setNavigationBarHidden:YES]; // _tableView.refreshControl = [[UIRefreshControl alloc] init]; @@ -215,59 +213,4 @@ return cell; } -#pragma mark - PhotoTableViewCellProtocol - -- (void)photoLikesWasTouchedWithPhoto:(PhotoModel *)photo -{ - -} - -- (void)userProfileWasTouchedWithUser:(UserModel *)user -{ - UserProfileViewController *userProfileView = [[UserProfileViewController alloc] initWithUser:user]; - - [self.navigationController pushViewController:userProfileView animated:YES]; -} - -- (void)photoLocationWasTouchedWithCoordinate:(CLLocationCoordinate2D)coordiantes name:(NSString *)name -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 1; - layout.minimumLineSpacing = 1; - layout.headerReferenceSize = CGSizeMake(self.view.bounds.size.width, 200); - - CGFloat numItemsLine = 3; - layout.itemSize = CGSizeMake((self.view.bounds.size.width - (numItemsLine - 1)) / numItemsLine, - (self.view.bounds.size.width - (numItemsLine - 1)) / numItemsLine); - - LocationCollectionViewController *locationCVC = [[LocationCollectionViewController alloc] initWithCollectionViewLayout:layout coordinates:coordiantes]; - locationCVC.navigationItem.title = name; - - [self.navigationController pushViewController:locationCVC animated:YES]; -} - -- (void)cellWasLongPressedWithPhoto:(PhotoModel *)photo -{ - UIAlertAction *savePhotoAction = [UIAlertAction actionWithTitle:@"Save Photo" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - NSLog(@"hi"); - }]; - - UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" - style:UIAlertActionStyleCancel - handler:^(UIAlertAction * _Nonnull action) { - - }]; - UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil - message:nil - preferredStyle:UIAlertControllerStyleActionSheet]; - - [alert addAction:savePhotoAction]; - [alert addAction:cancelAction]; - - [self presentViewController:alert animated:YES completion:^{}]; -} - - @end diff --git a/examples/ASDKgram/Sample/PhotoMapViewController.h b/examples/ASDKgram/Sample/PhotoMapViewController.h deleted file mode 100644 index a9bb063bcb..0000000000 --- a/examples/ASDKgram/Sample/PhotoMapViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// PhotoMapViewController.h -// Flickrgram -// -// Created by Hannah Troisi on 3/2/16. -// Copyright © 2016 Hannah Troisi. All rights reserved. -// - -#import - -@interface PhotoMapViewController : UIViewController - -@end diff --git a/examples/ASDKgram/Sample/PhotoMapViewController.m b/examples/ASDKgram/Sample/PhotoMapViewController.m deleted file mode 100644 index ce6a4049fc..0000000000 --- a/examples/ASDKgram/Sample/PhotoMapViewController.m +++ /dev/null @@ -1,195 +0,0 @@ -// -// PhotoMapViewController.m -// Flickrgram -// -// Created by Hannah Troisi on 3/2/16. -// Copyright © 2016 Hannah Troisi. All rights reserved. -// - -#import "PhotoMapViewController.h" -#import -#import -#import - -@interface PhotoMapViewController () -@end - -@implementation PhotoMapViewController -{ - MKMapView *_mapView; - UIButton *_mapCrosshairsBtn; - CLLocationManager *_locationManager; - BOOL _userLocationEnabled; - BOOL _CLLocationAuthorizationStatusDeniedAlertPresentedOnce; -} - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - - if (self) { - - self.navigationItem.title = @"Discover Nearby Photos"; - - // location manager - _locationManager = [[CLLocationManager alloc] init]; - _locationManager.delegate = self; - - // map view - _mapView = [[MKMapView alloc] init]; - _mapView.delegate = self; - - [self.view addSubview:_mapView]; - - // map view - crosshairs button - _mapCrosshairsBtn = [UIButton buttonWithType:UIButtonTypeSystem]; - [_mapCrosshairsBtn setImage:[UIImage imageNamed:@"crosshairs"] forState:UIControlStateNormal]; - [_mapCrosshairsBtn addTarget:self action:@selector(centerMapOnUsersLocationIfLocationEnabled) forControlEvents:UIControlEventTouchUpInside]; - - [self.view addSubview:_mapCrosshairsBtn]; - - // check App's CLLocation authorization status - [self checkCLAuthorizationStatusWithAlertForStatusDenied:NO]; - } - - return self; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - // check App's CLLocation authorization status & prompt user to enable if not authorized - [self checkCLAuthorizationStatusWithAlertForStatusDenied:YES]; - - if (_userLocationEnabled) { - - // if the user's location is enabled show it on the map - _mapView.showsUserLocation = YES; - - [_locationManager startUpdatingLocation]; - - // check if user's Location is in mapView visible area, if not center the map on the user - MKMapPoint userPoint = MKMapPointForCoordinate(_mapView.userLocation.location.coordinate); - MKMapRect mapRect = _mapView.visibleMapRect; - BOOL inside = MKMapRectContainsPoint(mapRect, userPoint); - if (!inside) { - [self centerMapOnUsersLocation]; - } - } -} - -#define MAP_CROSSHAIRS_BTN_WIDTH 30 -#define MAP_CROSSHAIRS_BTN_INSET 20 -- (void)viewWillLayoutSubviews -{ - // FIXME: tune into NSNotification - - [super viewWillLayoutSubviews]; - - CGSize boundsSize = self.view.bounds.size; - - // layout map crosshairs button - CGSize btnSize = CGSizeMake(MAP_CROSSHAIRS_BTN_WIDTH, MAP_CROSSHAIRS_BTN_WIDTH); - CGFloat x = boundsSize.width - btnSize.width - MAP_CROSSHAIRS_BTN_INSET; - CGFloat y = CGRectGetMinY(self.tabBarController.tabBar.frame) - btnSize.width - MAP_CROSSHAIRS_BTN_INSET; - _mapCrosshairsBtn.frame = (CGRect) {CGPointMake(x, y), btnSize}; - - // layout mapView - _mapView.frame = self.view.bounds; -} - -- (void)viewDidDisappear:(BOOL)animated -{ - if (_userLocationEnabled) { - [_locationManager stopUpdatingLocation]; - } -} - - -#pragma mark - Helper Functions - -- (void)centerMapOnUsersLocationIfLocationEnabled -{ - if (_userLocationEnabled) { - [self centerMapOnUsersLocation]; - } else { - [self checkCLAuthorizationStatusWithAlertForStatusDenied:YES]; - } -} - -#define ZOOM_SPAN_DELTA 0.03 -- (void)centerMapOnUsersLocation -{ - // set mapView region - CLLocationCoordinate2D location; - CLLocation *usersLocation = [_locationManager location]; - location.latitude = usersLocation.coordinate.latitude; - location.longitude = usersLocation.coordinate.longitude; - MKCoordinateSpan span = MKCoordinateSpanMake(ZOOM_SPAN_DELTA, ZOOM_SPAN_DELTA); - MKCoordinateRegion region = MKCoordinateRegionMake(location, span); - - [_mapView setRegion:region animated:YES]; -} - -- (void)checkCLAuthorizationStatusWithAlertForStatusDenied:(BOOL)showDeniedAlert -{ - // check app's permission to use location services - CLAuthorizationStatus status = [CLLocationManager authorizationStatus]; - - if (status == kCLAuthorizationStatusNotDetermined) { - - NSLog(@"App's permission to use location NOT DETERMINED"); - _userLocationEnabled = NO; - [_locationManager requestWhenInUseAuthorization]; - - } else if (status == kCLAuthorizationStatusDenied) { - - NSLog(@"App's permission to use location DENIED"); - - _userLocationEnabled = NO; - - if (showDeniedAlert) { - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil - message:@"Location services disabled. See Settings > Flickergram > Location to change." - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction *acknowledgeAction = [UIAlertAction actionWithTitle:@"Ok" - style:UIAlertActionStyleCancel - handler:^(UIAlertAction * _Nonnull action) {}]; - - [alertController addAction:acknowledgeAction]; - - [self presentViewController:alertController animated:YES completion:^{}]; - } - - } else if (status == kCLAuthorizationStatusRestricted) { - - NSLog(@"App's permission to use location RESTRICTED"); - _userLocationEnabled = NO; - - } else { - - NSLog(@"App has permission to use location"); - _userLocationEnabled = YES; - _mapView.showsUserLocation = YES; - } -} - -#pragma mark - MKMapKitDelegate - -- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation -{ - // FIXME: -} - - -#pragma mark - CLLocationManagerDelegate - -- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status -{ - [self checkCLAuthorizationStatusWithAlertForStatusDenied:NO]; - [self centerMapOnUsersLocationIfLocationEnabled]; -} - -@end diff --git a/examples/ASDKgram/Sample/PhotoTableViewCell.m b/examples/ASDKgram/Sample/PhotoTableViewCell.m index f881951da6..a65b7b010e 100644 --- a/examples/ASDKgram/Sample/PhotoTableViewCell.m +++ b/examples/ASDKgram/Sample/PhotoTableViewCell.m @@ -88,12 +88,6 @@ [self addSubview:_photoLikesLabel]; [self addSubview:_photoDescriptionLabel]; - UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(cellWasLongPressed:)]; - [self addGestureRecognizer:lpgr]; - - UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellWasTapped:)]; - [self addGestureRecognizer:tgr]; - #if DEBUG_PHOTOCELL_LAYOUT _userAvatarImageView.backgroundColor = [UIColor greenColor]; _userNameLabel.backgroundColor = [UIColor greenColor]; @@ -266,84 +260,4 @@ // }]; } - -#pragma mark - Gesture Handling - -- (void)cellWasLongPressed:(UIGestureRecognizer *)sender -{ - if (sender.state == UIGestureRecognizerStateBegan) { - - // determine which area of cell was tapped - CGPoint tapPoint = [sender locationInView:_photoImageView]; - - if (tapPoint.y > 0) { - - // photo long pressed - NSLog(@"LONG PRESS"); - - // need a 2nd method to be able to pass photo model - [self longPressRecognized]; - } - } -} - -- (void)longPressRecognized -{ - [self.delegate cellWasLongPressedWithPhoto:_photoModel]; -} - -- (void)cellWasTapped:(UIGestureRecognizer *)sender -{ - // determine which area of cell was tapped - CGPoint tapPoint = [sender locationInView:self]; - - if (tapPoint.y > HEADER_HEIGHT && tapPoint.y < (HEADER_HEIGHT + self.bounds.size.width)) { - - // photo tapped - NSLog(@"TAP: photo"); - - } else if (tapPoint.y > (HEADER_HEIGHT + self.bounds.size.width)) { - - [self.delegate photoLikesWasTouchedWithPhoto:_photoModel]; - [_photoModel.commentFeed requestPageWithCompletionBlock:^(NSArray *newcomments) {}]; //FIXME: make comments likes :) - - // photo tapped - NSLog(@"TAP: photo likes"); - - } else if (tapPoint.x <= CGRectGetMaxX(_userAvatarImageView.frame)) { - - // user avatar tapped - NSLog(@"TAP: Buddy Icon"); - - [self.delegate userProfileWasTouchedWithUser:_photoModel.ownerUserProfile]; - - // start downloading likes - [self startDownloadingLikesForPhoto:_photoModel]; - - } else if (tapPoint.x < CGRectGetMinX(_photoTimeIntervalSincePostLabel.frame)) { - - // check if location exists - if (_photoLocationLabel.attributedText) { - - if (tapPoint.y > CGRectGetMinY(_photoLocationLabel.frame)) { - NSLog(@"TAP: Location Label"); - [self.delegate photoLocationWasTouchedWithCoordinate:_photoModel.location.coordinates name:_photoLocationLabel.attributedText]; - - } else { - - NSLog(@"Tap: Username Label"); - - [self.delegate userProfileWasTouchedWithUser:_photoModel.ownerUserProfile]; - } - - } else { - - // username tapped - NSLog(@"Tap: Username Label"); - - [self.delegate userProfileWasTouchedWithUser:_photoModel.ownerUserProfile]; - } - } -} - @end diff --git a/examples/ASDKgram/Sample/PhotoTableViewController.m b/examples/ASDKgram/Sample/PhotoTableViewController.m index 74bba28ce2..c2a285a058 100644 --- a/examples/ASDKgram/Sample/PhotoTableViewController.m +++ b/examples/ASDKgram/Sample/PhotoTableViewController.m @@ -8,17 +8,12 @@ #import "PhotoTableViewController.h" #import "PhotoTableViewCell.h" -#import "UserProfileViewController.h" -#import "LikersViewController.h" -#import "LocationCollectionViewController.h" #import "PhotoFeedModel.h" #import "Utilities.h" #define AUTO_TAIL_LOADING_NUM_SCREENFULS 2.5 -@interface PhotoTableViewController () -@end @implementation PhotoTableViewController { @@ -35,7 +30,7 @@ if (self) { - self.navigationItem.title = @"500pixgram"; + self.navigationItem.title = @"UIKit"; [self.navigationController setNavigationBarHidden:YES]; self.refreshControl = [[UIRefreshControl alloc] init]; @@ -196,7 +191,6 @@ { PhotoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"photoCell" forIndexPath:indexPath]; - cell.delegate = self; [cell updateCellWithPhotoObject:[_photoFeed objectAtIndex:indexPath.row]]; return cell; @@ -208,66 +202,4 @@ return [PhotoTableViewCell heightForPhotoModel:photo withWidth:self.view.bounds.size.width]; } - -#pragma mark - PhotoTableViewCellProtocol - -- (void)userProfileWasTouchedWithUser:(UserModel *)user; -{ - UserProfileViewController *userProfileView = [[UserProfileViewController alloc] initWithUser:user]; - [self.navigationController pushViewController:userProfileView animated:YES]; - - // force navigationController visible - [self.navigationController setNavigationBarHidden:NO]; -} - -- (void)photoLocationWasTouchedWithCoordinate:(CLLocationCoordinate2D)coordiantes name:(NSAttributedString *)name -{ - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = 1; - layout.minimumLineSpacing = 1; - - CGFloat boundsWidth = self.view.bounds.size.width; - layout.headerReferenceSize = CGSizeMake(boundsWidth, 200); - - CGFloat photoColumnCount = 3; - CGFloat photoSize = (boundsWidth - (photoColumnCount - 1)) / photoColumnCount; - layout.itemSize = CGSizeMake(photoSize, photoSize); - - LocationCollectionViewController *locationCVC = [[LocationCollectionViewController alloc] initWithCollectionViewLayout:layout coordinates:coordiantes]; - locationCVC.navigationItem.title = name.string; - - [self.navigationController pushViewController:locationCVC animated:YES]; -} - -- (void)cellWasLongPressedWithPhoto:(PhotoModel *)photo -{ - UIAlertAction *savePhotoAction = [UIAlertAction actionWithTitle:@"Save Photo" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - NSLog(@"hi"); - }]; - - UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" - style:UIAlertActionStyleCancel - handler:^(UIAlertAction * _Nonnull action) { - - }]; - UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil - message:nil - preferredStyle:UIAlertControllerStyleActionSheet]; - - [alert addAction:savePhotoAction]; - [alert addAction:cancelAction]; - - [self presentViewController:alert animated:YES completion:^{}]; -} - -- (void)photoLikesWasTouchedWithPhoto:(PhotoModel *)photo -{ - LikersViewController *vc = [[LikersViewController alloc] initWithPhoto:photo]; - [self.navigationController pushViewController:vc animated:YES]; - - // force navigationController visible -} - @end diff --git a/examples/ASDKgram/Sample/UserProfileViewController.h b/examples/ASDKgram/Sample/UserProfileViewController.h deleted file mode 100644 index 176fbeac80..0000000000 --- a/examples/ASDKgram/Sample/UserProfileViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// UserProfileViewController.h -// Flickrgram -// -// Created by Hannah Troisi on 2/24/16. -// Copyright © 2016 Hannah Troisi. All rights reserved. -// - -#import -#import "UserModel.h" - -@interface UserProfileViewController : UIViewController - -//- (instancetype)initWithMe NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithUser:(UserModel *)user NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_UNAVAILABLE; -- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; - - -@end diff --git a/examples/ASDKgram/Sample/UserProfileViewController.m b/examples/ASDKgram/Sample/UserProfileViewController.m deleted file mode 100644 index c585e49e46..0000000000 --- a/examples/ASDKgram/Sample/UserProfileViewController.m +++ /dev/null @@ -1,401 +0,0 @@ -// -// UserProfileViewController.m -// Flickrgram -// -// Created by Hannah Troisi on 2/24/16. -// Copyright © 2016 Hannah Troisi. All rights reserved. -// - -#import "UserProfileViewController.h" -#import "Utilities.h" - -#define HEADER_HEIGHT 300 -#define USER_AVATAR_HEIGHT 70 -#define HEADER_HORIZONTAL_INSET 15 - -#define DEBUG_LAYOUT 0 - -@implementation UserProfileViewController -{ - UserModel *_user; - - UIImageView *_avatarImageView; - UIButton *_followingStatusBtn; - UILabel *_fullNameLabel; - UILabel *_aboutLabel; - UILabel *_domainLabel; - UILabel *_followersCountLabel; - UILabel *_followingCountLabel; - UILabel *_photoCountLabel; - - BOOL _animating; -} - -//- (instancetype)initWithMe -//{ -// UserModel *me = [[UserModel alloc] initWithMe]; -// -// [self initWithUser:me]; -//} - -- (instancetype)initWithUser:(UserModel *)user -{ - self = [super initWithNibName:nil bundle:nil]; - - if (self) { - - self.view.backgroundColor = [UIColor whiteColor]; - - _followingStatusBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - _followingStatusBtn.adjustsImageWhenHighlighted = NO; - [_followingStatusBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - [_followingStatusBtn setTitleColor:[UIColor lightBlueColor] forState:UIControlStateSelected]; - [_followingStatusBtn setTitle:@"Follow" forState:UIControlStateNormal]; - [_followingStatusBtn setTitle:@"Following" forState:UIControlStateSelected]; - [_followingStatusBtn addTarget:self action:@selector(toggleFollowing) forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:_followingStatusBtn]; - - _fullNameLabel = [[UILabel alloc] init]; - _fullNameLabel.font = [_fullNameLabel.font fontWithSize:14]; - [self.view addSubview:_fullNameLabel]; - - _aboutLabel = [[UILabel alloc] init]; - _aboutLabel.font = [_aboutLabel.font fontWithSize:14]; - _aboutLabel.numberOfLines = 3; - [self.view addSubview:_aboutLabel]; - - _domainLabel = [[UILabel alloc] init]; - _domainLabel.font = [_domainLabel.font fontWithSize:14]; - _domainLabel.textColor = [UIColor darkBlueColor]; - [self.view addSubview:_domainLabel]; - - _followersCountLabel = [[UILabel alloc] init]; - _followersCountLabel.font = [_followersCountLabel.font fontWithSize:14]; - _followersCountLabel.textColor = [UIColor lightGrayColor]; - _followersCountLabel.textAlignment = NSTextAlignmentCenter; - _followersCountLabel.numberOfLines = 2; - [self.view addSubview:_followersCountLabel]; - - _followingCountLabel = [[UILabel alloc] init]; - _followingCountLabel.font = [_followingCountLabel.font fontWithSize:14]; - _followingCountLabel.textColor = [UIColor lightGrayColor]; - _followingCountLabel.textAlignment = NSTextAlignmentCenter; - _followingCountLabel.numberOfLines = 2; - [self.view addSubview:_followingCountLabel]; - - _photoCountLabel = [[UILabel alloc] init]; - _photoCountLabel.font = [_photoCountLabel.font fontWithSize:14]; - _photoCountLabel.textColor = [UIColor lightGrayColor]; - _photoCountLabel.textAlignment = NSTextAlignmentCenter; - _photoCountLabel.numberOfLines = 2; - [self.view addSubview:_photoCountLabel]; - - // add to view last so that animation is on top - _avatarImageView = [[UIImageView alloc] init]; - [self.view addSubview:_avatarImageView]; - - // This is what we have available as soon as we're created, without fetching new metadata from the network. - _fullNameLabel.text = _user.fullName; - _user = user; - self.navigationItem.title = [user.username uppercaseString]; - - // get full set of user data - [self loadAdditionalProfileFields]; - - // get avatar image - [self loadAvatarImage]; - - - - UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(viewWasLongPressed:)]; -// [self.view addGestureRecognizer:lpgr]; - lpgr.minimumPressDuration = 0.01; - - if (DEBUG_LAYOUT) { - _avatarImageView.backgroundColor = [UIColor greenColor]; - _fullNameLabel.backgroundColor = [UIColor greenColor]; - _aboutLabel.backgroundColor = [UIColor greenColor]; - _domainLabel.backgroundColor = [UIColor greenColor]; - _followersCountLabel.backgroundColor = [UIColor greenColor]; - _followingCountLabel.backgroundColor = [UIColor greenColor]; - _photoCountLabel.backgroundColor = [UIColor greenColor]; - } - } - return self; -} - -- (void)viewDidLayoutSubviews -{ - [super viewDidLayoutSubviews]; - - CGSize boundsSize = self.view.bounds.size; - - if (_animating) { - return; - } - - // user avatar - CGFloat x = HEADER_HORIZONTAL_INSET; - CGFloat originalY = CGRectGetMaxY(self.navigationController.navigationBar.frame) + HEADER_HORIZONTAL_INSET; - CGFloat y = originalY; - _avatarImageView.frame = CGRectMake(x, - y, - USER_AVATAR_HEIGHT, - USER_AVATAR_HEIGHT); - y += _avatarImageView.frame.size.height; - - if (!_avatarImageView.image) { - // We generate the rounded image at layout time (unusually late) so that we can know exactly how large - // it needs to be. This is the only way to ensure the rounded curve is perfectly smoothed / antialiased. -// _avatarImageView.image = [avatar makeCircularImageWithSize:CGSizeMake(USER_AVATAR_HEIGHT, USER_AVATAR_HEIGHT)]; - } - - if (_fullNameLabel.text) { - [_fullNameLabel sizeToFit]; - y += HEADER_HORIZONTAL_INSET / 2.0; - _fullNameLabel.frame = CGRectMake(x, - y, - boundsSize.width - 2 * HEADER_HORIZONTAL_INSET, - _fullNameLabel.frame.size.height); - - y += _fullNameLabel.frame.size.height; - } - - if (_aboutLabel.text) { - [_aboutLabel sizeToFit]; - y += HEADER_HORIZONTAL_INSET / 2.0; - _aboutLabel.frame = CGRectMake(x, - y, - boundsSize.width - 2 * HEADER_HORIZONTAL_INSET, - _aboutLabel.frame.size.height); - - y += _aboutLabel.frame.size.height; - } - - if (_domainLabel.text) { - [_domainLabel sizeToFit]; - y += HEADER_HORIZONTAL_INSET / 2.0; - _domainLabel.frame = CGRectMake(x, - y, - boundsSize.width - 2 * HEADER_HORIZONTAL_INSET, - _domainLabel.frame.size.height); - } - - CGFloat availableWidth = boundsSize.width - 3 * HEADER_HORIZONTAL_INSET - USER_AVATAR_HEIGHT; - CGFloat actualWidth = floorf((availableWidth - 2 * HEADER_HORIZONTAL_INSET / 2.0) / 3.0); - - y = originalY; - x += USER_AVATAR_HEIGHT + HEADER_HORIZONTAL_INSET; - - [_photoCountLabel sizeToFit]; - _photoCountLabel.frame = CGRectMake(x, - y, - actualWidth, - _photoCountLabel.frame.size.height); - x += actualWidth; - - [_followersCountLabel sizeToFit]; - x += HEADER_HORIZONTAL_INSET / 2.0; - _followersCountLabel.frame = CGRectMake(x, - y, - actualWidth, - _followersCountLabel.frame.size.height); - x += actualWidth; - - [_followingCountLabel sizeToFit]; - x += HEADER_HORIZONTAL_INSET / 2.0; - _followingCountLabel.frame = CGRectMake(x, - y, - actualWidth, - _followingCountLabel.frame.size.height); - - x = USER_AVATAR_HEIGHT + 2 * HEADER_HORIZONTAL_INSET; - y = originalY + USER_AVATAR_HEIGHT / 2.0; - _followingStatusBtn.frame = CGRectMake(x, - y, - availableWidth, - USER_AVATAR_HEIGHT / 2.0); - - [self setFollowingButtonBackgroundsForRect:_followingStatusBtn.frame.size]; -} - - -#pragma mark - Touch Events - -- (void)viewWasLongPressed:(UIGestureRecognizer *)sender -{ - - if (sender.state == UIGestureRecognizerStateBegan) { - - // determine which area of cell was tapped - CGPoint tapPoint = [sender locationInView:_avatarImageView]; - - if (tapPoint.y > 0) { - - NSLog(@"LONG PRESS STARTED"); - - _animating = YES; - - // FIXME: use pinremote image to download higher res photo - - [UIView animateWithDuration:0.2 - delay:0 - usingSpringWithDamping:0.5 - initialSpringVelocity:1.0f - options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut - animations:^{ - - // FIXME: grey the background - - _avatarImageView.frame = CGRectMake(100, 100, 100, 100); - - } completion:^(BOOL finished) { - _animating = NO; - }]; - } - } - - if (sender.state == UIGestureRecognizerStateEnded) { - - // determine which area of cell was tapped - CGPoint tapPoint = [sender locationInView:_avatarImageView]; - - if (tapPoint.y > 0) { // FIXME: all long presses work here - - NSLog(@"LONG PRESS ENDED"); - - _animating = YES; - - [UIView animateWithDuration:0.2 - delay:0 - usingSpringWithDamping:0.5 - initialSpringVelocity:1.0f - options: UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut - animations:^{ - - CGFloat x = HEADER_HORIZONTAL_INSET; - CGFloat originalY = CGRectGetMaxY(self.navigationController.navigationBar.frame) + HEADER_HORIZONTAL_INSET; - CGFloat y = originalY; - _avatarImageView.frame = CGRectMake(x, - y, - USER_AVATAR_HEIGHT, - USER_AVATAR_HEIGHT); - - } completion:^(BOOL finished) { - _animating = NO; - - }]; - - } - } -} - -- (void)toggleFollowing -{ - // toggle button state - if (_followingStatusBtn.selected) { - - // stop following - NSString *urlString = [NSString stringWithFormat:@"https://api.500px.com/v1/users/%lu/friends?consumer_key=Fi13GVb8g53sGvHICzlram7QkKOlSDmAmp9s9aqC", (long)_user.userID]; - NSURL *url = [NSURL URLWithString:urlString]; - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request setHTTPMethod:@"DELETE"]; - - // FIXME: update user model - // FIXME: check for success - - } else { - - // start following - NSString *urlString = [NSString stringWithFormat:@"https://api.500px.com/v1/users/%lu/friends?consumer_key=Fi13GVb8g53sGvHICzlram7QkKOlSDmAmp9s9aqC", (long)_user.userID]; - NSURL *url = [NSURL URLWithString:urlString]; - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request setHTTPMethod:@"POST"]; - } - - _followingStatusBtn.selected = !_followingStatusBtn.selected; -} - -- (void)getFollowers -{ - NSString *urlString = [NSString stringWithFormat:@"https://api.500px.com/v1/users/%lu/friends?consumer_key=Fi13GVb8g53sGvHICzlram7QkKOlSDmAmp9s9aqC", (long)_user.userID]; - NSURL *url = [NSURL URLWithString:urlString]; - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request setHTTPMethod:@"GET"]; -} - -#pragma mark - Helper Methods - -- (void)loadAdditionalProfileFields -{ - // fetch full user profile info - [_user downloadCompleteUserDataWithCompletionBlock:^(UserModel *userModel) { - - // check that info returning from async download is still applicable to this view - if (userModel == _user) { - - _followingStatusBtn.selected = userModel.following; - _followersCountLabel.text = [NSString stringWithFormat:@"%lu\nfollowers", (long)userModel.followersCount]; - _followingCountLabel.text = [NSString stringWithFormat:@"%lu\nfollowing", (long)userModel.friendsCount]; - _photoCountLabel.text = [NSString stringWithFormat:@"%lu\nphotos", (long)userModel.photoCount]; - _aboutLabel.text = userModel.about; - _domainLabel.text = userModel.domain; - - [self.view setNeedsLayout]; - } - }]; -} - -- (void)loadAvatarImage -{ - [_user fetchAvatarImageWithCompletionBlock:^(UserModel *userModel, UIImage *avatar) { - - // check that info returning from async download is still applicable to this view - if (userModel == _user) { - [self.view setNeedsLayout]; - } - }]; -} - -#define FOLLOW_BUTTON_CORNER_RADIUS 8 -- (void)setFollowingButtonBackgroundsForRect:(CGSize)size -{ - CGSize unstretchedSize = CGSizeMake(2 * FOLLOW_BUTTON_CORNER_RADIUS + 1, 2 * FOLLOW_BUTTON_CORNER_RADIUS + 1); - CGRect rect = (CGRect) {CGPointZero, unstretchedSize}; - UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:FOLLOW_BUTTON_CORNER_RADIUS]; - - UIColor *lightBlue = [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0]; - - // create a graphics context for the following status button - UIGraphicsBeginImageContextWithOptions(unstretchedSize, NO, 0); - - [path addClip]; - [lightBlue setFill]; - [path fill]; - - UIImage *notFollowingBtnImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - UIImage *notFollowingBtnImageStretchable = [notFollowingBtnImage stretchableImageWithLeftCapWidth:FOLLOW_BUTTON_CORNER_RADIUS topCapHeight:FOLLOW_BUTTON_CORNER_RADIUS]; - [_followingStatusBtn setBackgroundImage:notFollowingBtnImageStretchable forState:UIControlStateNormal]; - - // create a graphics context for the not yet following status button - UIGraphicsBeginImageContextWithOptions(unstretchedSize, NO, 0); - - [path addClip]; - - [[UIColor whiteColor] setFill]; - [path fill]; - - path.lineWidth = 3; - [lightBlue setStroke]; - [path stroke]; - - UIImage *followingBtnImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - UIImage *followingBtnImageStretchable = [followingBtnImage stretchableImageWithLeftCapWidth:FOLLOW_BUTTON_CORNER_RADIUS topCapHeight:FOLLOW_BUTTON_CORNER_RADIUS]; - [_followingStatusBtn setBackgroundImage:followingBtnImageStretchable forState:UIControlStateSelected]; -} - -@end