├── .gitignore
├── RKCard
├── RKCard
│ ├── RKCard-Bridging-Header.h
│ ├── Images.xcassets
│ │ ├── exampleProfile.imageset
│ │ │ ├── yhJf065H.jpg
│ │ │ ├── yhJf065H-1.jpg
│ │ │ ├── yhJf065H-1-1.jpg
│ │ │ └── Contents.json
│ │ ├── exampleCover.imageset
│ │ │ ├── 1503887_10152207410423064_1744981207_n.jpg
│ │ │ ├── 1503887_10152207410423064_1744981207_n-1.jpg
│ │ │ ├── 1503887_10152207410423064_1744981207_n-1-1.jpg
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── RKCardView.swift
│ ├── ViewController.h
│ ├── AppDelegate.h
│ ├── main.m
│ ├── Info.plist
│ ├── ViewController.m
│ ├── Base.lproj
│ │ ├── Main.storyboard
│ │ └── LaunchScreen.xib
│ ├── RKCardView.h
│ ├── AppDelegate.m
│ └── RKCardView.m
├── RKCard.xcodeproj
│ ├── xcuserdata
│ │ └── cwrichardkim93.xcuserdatad
│ │ │ ├── xcdebugger
│ │ │ └── Breakpoints_v2.xcbkptlist
│ │ │ └── xcschemes
│ │ │ ├── xcschememanagement.plist
│ │ │ └── RKCard.xcscheme
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcuserdata
│ │ │ └── cwrichardkim93.xcuserdatad
│ │ │ │ └── UserInterfaceState.xcuserstate
│ │ └── xcshareddata
│ │ │ └── RKCard.xccheckout
│ └── project.pbxproj
└── RKCardTests
│ ├── Info.plist
│ └── RKCardTests.m
├── LICENSE
├── README.md
└── RKCardView.podspec
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | *.xcuserstate
3 |
4 | *.xcscheme
5 |
6 | xcschememanagement.plist
7 |
8 |
--------------------------------------------------------------------------------
/RKCard/RKCard/RKCard-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | //
2 | // Use this file to import your target's public headers that you would like to expose to Swift.
3 | //
4 |
5 |
--------------------------------------------------------------------------------
/RKCard/RKCard/Images.xcassets/exampleProfile.imageset/yhJf065H.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cwRichardKim/RKCardView/HEAD/RKCard/RKCard/Images.xcassets/exampleProfile.imageset/yhJf065H.jpg
--------------------------------------------------------------------------------
/RKCard/RKCard/Images.xcassets/exampleProfile.imageset/yhJf065H-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cwRichardKim/RKCardView/HEAD/RKCard/RKCard/Images.xcassets/exampleProfile.imageset/yhJf065H-1.jpg
--------------------------------------------------------------------------------
/RKCard/RKCard/Images.xcassets/exampleProfile.imageset/yhJf065H-1-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cwRichardKim/RKCardView/HEAD/RKCard/RKCard/Images.xcassets/exampleProfile.imageset/yhJf065H-1-1.jpg
--------------------------------------------------------------------------------
/RKCard/RKCard.xcodeproj/xcuserdata/cwrichardkim93.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/RKCard/RKCard.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/RKCard/RKCard/Images.xcassets/exampleCover.imageset/1503887_10152207410423064_1744981207_n.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cwRichardKim/RKCardView/HEAD/RKCard/RKCard/Images.xcassets/exampleCover.imageset/1503887_10152207410423064_1744981207_n.jpg
--------------------------------------------------------------------------------
/RKCard/RKCard/Images.xcassets/exampleCover.imageset/1503887_10152207410423064_1744981207_n-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cwRichardKim/RKCardView/HEAD/RKCard/RKCard/Images.xcassets/exampleCover.imageset/1503887_10152207410423064_1744981207_n-1.jpg
--------------------------------------------------------------------------------
/RKCard/RKCard/Images.xcassets/exampleCover.imageset/1503887_10152207410423064_1744981207_n-1-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cwRichardKim/RKCardView/HEAD/RKCard/RKCard/Images.xcassets/exampleCover.imageset/1503887_10152207410423064_1744981207_n-1-1.jpg
--------------------------------------------------------------------------------
/RKCard/RKCard.xcodeproj/project.xcworkspace/xcuserdata/cwrichardkim93.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cwRichardKim/RKCardView/HEAD/RKCard/RKCard.xcodeproj/project.xcworkspace/xcuserdata/cwrichardkim93.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/RKCard/RKCard/RKCardView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RKCardView.swift
3 | // RKCard
4 | //
5 | // Created by Richard Kim on 11/18/14.
6 | // Copyright (c) 2014 Richard Kim. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | class RKCardView: UIView {
13 | var profileImageView:UIImageView?
14 |
15 | }
--------------------------------------------------------------------------------
/RKCard/RKCard/ViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.h
3 | // RKCard
4 | //
5 | // Created by Richard Kim on 11/5/14.
6 | // Copyright (c) 2014 Richard Kim. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "RKCardView.h"
11 |
12 | @interface ViewController : UIViewController
13 |
14 |
15 | @end
16 |
17 |
--------------------------------------------------------------------------------
/RKCard/RKCard/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // RKCard
4 | //
5 | // Created by Richard Kim on 11/5/14.
6 | // Copyright (c) 2014 Richard Kim. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 |
16 | @end
17 |
18 |
--------------------------------------------------------------------------------
/RKCard/RKCard/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // RKCard
4 | //
5 | // Created by Richard Kim on 11/5/14.
6 | // Copyright (c) 2014 Richard Kim. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "AppDelegate.h"
11 |
12 | int main(int argc, char * argv[]) {
13 | @autoreleasepool {
14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/RKCard/RKCard/Images.xcassets/exampleProfile.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "yhJf065H.jpg"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x",
11 | "filename" : "yhJf065H-1.jpg"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x",
16 | "filename" : "yhJf065H-1-1.jpg"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/RKCard/RKCard/Images.xcassets/exampleCover.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "1503887_10152207410423064_1744981207_n.jpg"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x",
11 | "filename" : "1503887_10152207410423064_1744981207_n-1.jpg"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x",
16 | "filename" : "1503887_10152207410423064_1744981207_n-1-1.jpg"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/RKCard/RKCard.xcodeproj/xcuserdata/cwrichardkim93.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | RKCard.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | 99B7F25A1A0AAB4E00E8EC51
16 |
17 | primary
18 |
19 |
20 | 99B7F2731A0AAB4E00E8EC51
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/RKCard/RKCard/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | }
33 | ],
34 | "info" : {
35 | "version" : 1,
36 | "author" : "xcode"
37 | }
38 | }
--------------------------------------------------------------------------------
/RKCard/RKCardTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | com.cwRichardKim.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/RKCard/RKCardTests/RKCardTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // RKCardTests.m
3 | // RKCardTests
4 | //
5 | // Created by Richard Kim on 11/5/14.
6 | // Copyright (c) 2014 Richard Kim. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface RKCardTests : XCTestCase
13 |
14 | @end
15 |
16 | @implementation RKCardTests
17 |
18 | - (void)setUp {
19 | [super setUp];
20 | // Put setup code here. This method is called before the invocation of each test method in the class.
21 | }
22 |
23 | - (void)tearDown {
24 | // Put teardown code here. This method is called after the invocation of each test method in the class.
25 | [super tearDown];
26 | }
27 |
28 | - (void)testExample {
29 | // This is an example of a functional test case.
30 | XCTAssert(YES, @"Pass");
31 | }
32 |
33 | - (void)testPerformanceExample {
34 | // This is an example of a performance test case.
35 | [self measureBlock:^{
36 | // Put the code you want to measure the time of here.
37 | }];
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2014 Choong-Won Richard Kim
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/RKCard/RKCard/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | com.cwRichardKim.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/RKCard/RKCard/ViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.m
3 | // RKCard
4 | //
5 | // Created by Richard Kim on 11/5/14.
6 | // Copyright (c) 2014 Richard Kim. All rights reserved.
7 | //
8 |
9 | #import "ViewController.h"
10 | #import "RKCardView.h"
11 |
12 | #define BUFFERX 20 //distance from side to the card (higher makes thinner card)
13 | #define BUFFERY 40 //distance from top to the card (higher makes shorter card)
14 |
15 | @interface ViewController ()
16 |
17 | @end
18 |
19 | @implementation ViewController
20 |
21 | - (void)viewDidLoad {
22 | [super viewDidLoad];
23 | self.view.backgroundColor = [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:1];
24 |
25 |
26 | RKCardView* cardView= [[RKCardView alloc]initWithFrame:CGRectMake(BUFFERX, BUFFERY, self.view.frame.size.width-2*BUFFERX, self.view.frame.size.height-2*BUFFERY)];
27 |
28 | cardView.coverImageView.image = [UIImage imageNamed:@"exampleCover"];
29 | cardView.profileImageView.image = [UIImage imageNamed:@"exampleProfile"];
30 | cardView.titleLabel.text = @"Richard Kim";
31 | cardView.delegate = self;
32 | // [cardView addBlur];
33 | // [cardView addShadow];
34 | [self.view addSubview:cardView];
35 | }
36 |
37 | - (void)didReceiveMemoryWarning {
38 | [super didReceiveMemoryWarning];
39 | // Dispose of any resources that can be recreated.
40 | }
41 |
42 |
43 | // Optional RKCardViewDelegate methods
44 |
45 | -(void)nameTap {
46 | NSLog(@"Taped on name");
47 | }
48 |
49 | -(void)coverPhotoTap {
50 | NSLog(@"Taped on cover photo");
51 | }
52 |
53 | -(void)profilePhotoTap {
54 | NSLog(@"Taped on profile photo");
55 | }
56 | @end
57 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | RKCardView
2 | ==========
3 | Beautiful Twitter / Facebook style cards (built with [@JaredTMoskowitz](https://twitter.com/jaredtmoskowitz))
4 |
5 | [Support](http://cwrichardkim.com) or [Twitter @cwRichardKim](https://twitter.com/cwRichardKim)
6 |
7 | Or [Check out my Medium posts on UI / UX](https://medium.com/@cwRichardKim)
8 |
9 | This is a **template** for making beautiful cards
10 |
11 | 
12 |
13 | 
14 |
15 | ## Responsive Design!
16 | Change the size and the card responds in turn
17 |
18 | 
19 | 
20 |
21 | ## Examples
22 | An example of RKCardView used in a real project
23 |
24 | 
25 |
26 | ## Usage
27 | __Pod__
28 | ```objc-c
29 | pod 'RKCardView'
30 | ```
31 |
32 | ```obj-c
33 | RKCardView* cardView= [[RKCardView alloc]initWithFrame:CGRectMake(x origin, y origin, card width, card height)];
34 |
35 | cardView.coverImageView.image = [UIImage imageNamed:@"your cover photo"];
36 | cardView.profileImageView.image = [UIImage imageNamed:@"your profile picture"];
37 | cardView.titleLabel.text = @"Richard Kim";
38 | [cardView addBlur]; // comment this out if you don't want blur
39 | [cardView addShadow]; // comment this out if you don't want a shadow
40 | [self.view addSubview:cardView];
41 | ```
42 |
43 | ### Areas for Improvement / Involvement
44 | * More rigorous responsive design (making it look nicer with a wider range of dimensions)
45 | * Other custom properties (eg: tap to expand, double sided, tap to flip)
46 |
--------------------------------------------------------------------------------
/RKCard/RKCard/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/RKCard/RKCard.xcodeproj/project.xcworkspace/xcshareddata/RKCard.xccheckout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDESourceControlProjectFavoriteDictionaryKey
6 |
7 | IDESourceControlProjectIdentifier
8 | 8869377D-F030-4240-8E87-6A436A3B63A2
9 | IDESourceControlProjectName
10 | RKCard
11 | IDESourceControlProjectOriginsDictionary
12 |
13 | A26D9AD7A2EBFFD7CA8A637BE813CBA50A83E49C
14 | https://github.com/cwRichardKim/RKCardView.git
15 |
16 | IDESourceControlProjectPath
17 | RKCard/RKCard.xcodeproj
18 | IDESourceControlProjectRelativeInstallPathDictionary
19 |
20 | A26D9AD7A2EBFFD7CA8A637BE813CBA50A83E49C
21 | ../../..
22 |
23 | IDESourceControlProjectURL
24 | https://github.com/cwRichardKim/RKCardView.git
25 | IDESourceControlProjectVersion
26 | 111
27 | IDESourceControlProjectWCCIdentifier
28 | A26D9AD7A2EBFFD7CA8A637BE813CBA50A83E49C
29 | IDESourceControlProjectWCConfigurations
30 |
31 |
32 | IDESourceControlRepositoryExtensionIdentifierKey
33 | public.vcs.git
34 | IDESourceControlWCCIdentifierKey
35 | A26D9AD7A2EBFFD7CA8A637BE813CBA50A83E49C
36 | IDESourceControlWCCName
37 | RKCardView
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/RKCard/RKCard/RKCardView.h:
--------------------------------------------------------------------------------
1 | //
2 | // RKCardView.h
3 | // RKCard
4 | //
5 | // Created by Richard Kim on 11/5/14.
6 | // Copyright (c) 2014 Richard Kim. All rights reserved.
7 | //
8 |
9 | /*
10 |
11 | Copyright (c) 2014 Choong-Won Richard Kim
12 |
13 | Permission is hereby granted, free of charge, to any person obtaining a copy
14 | of this software and associated documentation files (the "Software"), to deal
15 | in the Software without restriction, including without limitation the rights
16 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17 | copies of the Software, and to permit persons to whom the Software is furnished
18 | to do so, subject to the following conditions:
19 |
20 | The above copyright notice and this permission notice shall be included in all
21 | copies or substantial portions of the Software.
22 |
23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29 | THE SOFTWARE.
30 |
31 | */
32 | #import
33 |
34 | @protocol RKCardViewDelegate
35 | @optional
36 | - (void)nameTap;
37 | - (void)coverPhotoTap;
38 | - (void)profilePhotoTap;
39 | @end
40 |
41 |
42 | @interface RKCardView : UIView
43 |
44 | @property (nonatomic, weak) IBOutlet id delegate;
45 | @property (nonatomic)UIImageView *profileImageView;
46 | @property (nonatomic)UIImageView *coverImageView;
47 | @property (nonatomic)UILabel *titleLabel;
48 |
49 | - (void)addBlur;
50 | - (void)removeBlur;
51 | - (void)addShadow;
52 | - (void)removeShadow;
53 |
54 | @end
55 |
--------------------------------------------------------------------------------
/RKCard/RKCard/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // RKCard
4 | //
5 | // Created by Richard Kim on 11/5/14.
6 | // Copyright (c) 2014 Richard Kim. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 |
11 | @interface AppDelegate ()
12 |
13 | @end
14 |
15 | @implementation AppDelegate
16 |
17 |
18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
19 | // Override point for customization after application launch.
20 | return YES;
21 | }
22 |
23 | - (void)applicationWillResignActive:(UIApplication *)application {
24 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
25 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
26 | }
27 |
28 | - (void)applicationDidEnterBackground:(UIApplication *)application {
29 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
30 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
31 | }
32 |
33 | - (void)applicationWillEnterForeground:(UIApplication *)application {
34 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
35 | }
36 |
37 | - (void)applicationDidBecomeActive:(UIApplication *)application {
38 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
39 | }
40 |
41 | - (void)applicationWillTerminate:(UIApplication *)application {
42 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
43 | }
44 |
45 | @end
46 |
--------------------------------------------------------------------------------
/RKCard/RKCard/Base.lproj/LaunchScreen.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
20 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/RKCardView.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 |
3 | # ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
4 | #
5 | # These will help people to find your library, and whilst it
6 | # can feel like a chore to fill in it's definitely to your advantage. The
7 | # summary should be tweet-length, and the description more in depth.
8 | #
9 |
10 | s.name = "RKCardView"
11 | s.version = "0.1.0"
12 | s.summary = "iOS: Simple and beautiful Twitter / Facebook style card template"
13 |
14 | s.description = "A template for all projects that use cards. Works especially well with the Twitter or Facebook API', -cardView, -Card, -UI, -Tinder, -iphone, -xcode"
15 |
16 | s.homepage = "https://github.com/cwRichardKim/RKCardView"
17 | s.screenshots = "http://i.imgur.com/shA68PXl.png"
18 |
19 |
20 | # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
21 | #
22 | # Licensing your code is important. See http://choosealicense.com for more info.
23 | # CocoaPods will detect a license file if there is a named LICENSE*
24 | # Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'.
25 | #
26 |
27 | # s.license = "MIT (example)"
28 | s.license = { :type => "MIT", :file => "LICENSE" }
29 |
30 |
31 | # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
32 | #
33 | # Specify the authors of the library, with email addresses. Email addresses
34 | # of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also
35 | # accepts just a name if you'd rather not provide an email address.
36 | #
37 | # Specify a social_media_url where others can refer to, for example a twitter
38 | # profile URL.
39 | #
40 |
41 | s.author = "cwrichardkim"
42 | # s.authors = { "cwrichardkim93" => "cwrichardkim93@gmail.com" }
43 | s.social_media_url = "http://twitter.com/cwrichardkim"
44 |
45 | # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
46 | #
47 | # If this Pod runs only on iOS or OS X, then specify the platform and
48 | # the deployment target. You can optionally include the target after the platform.
49 | #
50 |
51 | # s.platform = :ios
52 | s.platform = :ios, "7.0"
53 |
54 | # When using multiple platforms
55 | # s.ios.deployment_target = "5.0"
56 | # s.osx.deployment_target = "10.7"
57 |
58 |
59 | # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
60 | #
61 | # Specify the location from where the source should be retrieved.
62 | # Supports git, hg, bzr, svn and HTTP.
63 | #
64 |
65 | s.source = { :git => "https://github.com/cwRichardKim/RKCardView.git", :tag => s.version.to_s }
66 |
67 |
68 | # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
69 | #
70 | # CocoaPods is smart about how it includes source code. For source files
71 | # giving a folder will include any h, m, mm, c & cpp files. For header
72 | # files it will include any header in the folder.
73 | # Not including the public_header_files will make all headers public.
74 | #
75 |
76 | s.source_files = 'RKCard/RKCard/RKCardView.h', 'RKCard/RKCard/RKCardView.m'
77 |
78 | # s.public_header_files = "Classes/**/*.h"
79 |
80 |
81 | # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
82 | #
83 | # A list of resources included with the Pod. These are copied into the
84 | # target bundle with a build phase script. Anything else will be cleaned.
85 | # You can preserve files from being cleaned, please don't preserve
86 | # non-essential files like tests, examples and documentation.
87 | #
88 |
89 | # s.resource = "icon.png"
90 | # s.resources = "Resources/*.png"
91 |
92 |
93 | # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
94 | #
95 | # Link your library with frameworks, or libraries. Libraries do not include
96 | # the lib prefix of their name.
97 | #
98 |
99 | # s.framework = "SomeFramework"
100 | # s.frameworks = "SomeFramework", "AnotherFramework"
101 |
102 | # s.library = "iconv"
103 | # s.libraries = "iconv", "xml2"
104 |
105 |
106 | # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
107 | #
108 | # If your library depends on compiler flags you can set them in the xcconfig hash
109 | # where they will only apply to your library. If you depend on other Podspecs
110 | # you can include multiple dependencies to ensure it works.
111 |
112 | s.requires_arc = true
113 |
114 | # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
115 | # s.dependency "JSONKit", "~> 1.4"
116 |
117 | end
118 |
--------------------------------------------------------------------------------
/RKCard/RKCard.xcodeproj/xcuserdata/cwrichardkim93.xcuserdatad/xcschemes/RKCard.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
75 |
76 |
82 |
83 |
84 |
85 |
86 |
87 |
93 |
94 |
100 |
101 |
102 |
103 |
105 |
106 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/RKCard/RKCard/RKCardView.m:
--------------------------------------------------------------------------------
1 | //
2 | // RKCardView.m
3 | // RKCard
4 | //
5 | // Created by Richard Kim on 11/5/14.
6 | // Copyright (c) 2014 Richard Kim. All rights reserved.
7 | //
8 |
9 | /*
10 |
11 | Copyright (c) 2014 Choong-Won Richard Kim
12 |
13 | Permission is hereby granted, free of charge, to any person obtaining a copy
14 | of this software and associated documentation files (the "Software"), to deal
15 | in the Software without restriction, including without limitation the rights
16 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17 | copies of the Software, and to permit persons to whom the Software is furnished
18 | to do so, subject to the following conditions:
19 |
20 | The above copyright notice and this permission notice shall be included in all
21 | copies or substantial portions of the Software.
22 |
23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29 | THE SOFTWARE.
30 |
31 | */
32 |
33 |
34 |
35 | #import "RKCardView.h"
36 |
37 | // Responsive view ratio values
38 | #define CORNER_RATIO 0.015
39 | #define CP_RATIO 0.38
40 | #define PP_RATIO 0.247
41 | #define PP_X_RATIO 0.03
42 | #define PP_Y_RATIO 0.213
43 | #define PP_BUFF 3
44 | #define LABEL_Y_RATIO .012
45 |
46 | @implementation RKCardView {
47 | UIVisualEffectView *visualEffectView;
48 | }
49 | @synthesize delegate;
50 | @synthesize profileImageView;
51 | @synthesize coverImageView;
52 | @synthesize titleLabel;
53 |
54 | - (id)initWithFrame:(CGRect)frame
55 | {
56 | self = [super initWithFrame:frame];
57 | if (self) {
58 | [self setupView];
59 | }
60 | return self;
61 | }
62 |
63 | -(id)initWithCoder:(NSCoder *)aDecoder
64 | {
65 | self = [super initWithCoder:aDecoder];
66 | if(self) {
67 | [self setupView];
68 | }
69 | return self;
70 | }
71 |
72 | - (void)addShadow
73 | {
74 | self.layer.shadowOpacity = 0.15;
75 | }
76 |
77 | - (void)removeShadow
78 | {
79 | self.layer.shadowOpacity = 0;
80 | }
81 |
82 | -(void)setupView
83 | {
84 | self.backgroundColor = [UIColor whiteColor];
85 | self.layer.cornerRadius = self.frame.size.width * CORNER_RATIO;
86 | self.layer.shadowRadius = 3;
87 | self.layer.shadowOpacity = 0;
88 | self.layer.shadowOffset = CGSizeMake(1, 1);
89 | [self setupPhotos];
90 | }
91 |
92 | -(void)setupPhotos
93 | {
94 | CGFloat height = self.frame.size.height;
95 | CGFloat width = self.frame.size.width;
96 | UIView *cp_mask = [[UIView alloc]initWithFrame:CGRectMake(0, 0, width, height * CP_RATIO)];
97 | UIView *pp_mask = [[UIView alloc]initWithFrame:CGRectMake(width * PP_X_RATIO, height * PP_Y_RATIO, height * PP_RATIO, height *PP_RATIO)];
98 | UIView *pp_circle = [[UIView alloc]initWithFrame:CGRectMake(pp_mask.frame.origin.x - PP_BUFF, pp_mask.frame.origin.y - PP_BUFF, pp_mask.frame.size.width + 2* PP_BUFF, pp_mask.frame.size.height + 2*PP_BUFF)];
99 | pp_circle.backgroundColor = [UIColor whiteColor];
100 | pp_circle.layer.cornerRadius = pp_circle.frame.size.height/2;
101 | pp_mask.layer.cornerRadius = pp_mask.frame.size.height/2;
102 | cp_mask.backgroundColor = [UIColor colorWithRed:0.98 green:0.98 blue:0.98 alpha:1];
103 |
104 | CGFloat cornerRadius = self.layer.cornerRadius;
105 | UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:cp_mask.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(cornerRadius, cornerRadius)];
106 | CAShapeLayer *maskLayer = [CAShapeLayer layer];
107 | maskLayer.frame = cp_mask.bounds;
108 | maskLayer.path = maskPath.CGPath;
109 | cp_mask.layer.mask = maskLayer;
110 |
111 |
112 | UIBlurEffect* blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
113 | visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
114 |
115 | visualEffectView.frame = cp_mask.frame;
116 | visualEffectView.alpha = 0;
117 |
118 | profileImageView = [[UIImageView alloc]init];
119 | profileImageView.frame = CGRectMake(0, 0, pp_mask.frame.size.width, pp_mask.frame.size.height);
120 | coverImageView = [[UIImageView alloc]init];
121 | coverImageView.frame = cp_mask.frame;
122 | [coverImageView setContentMode:UIViewContentModeScaleAspectFill];
123 |
124 | [cp_mask addSubview:coverImageView];
125 | [pp_mask addSubview:profileImageView];
126 | cp_mask.clipsToBounds = YES;
127 | pp_mask.clipsToBounds = YES;
128 |
129 | // Setup the label
130 | CGFloat titleLabelX = pp_circle.frame.origin.x+pp_circle.frame.size.width;
131 | titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(titleLabelX, cp_mask.frame.size.height + 7, self.frame.size.width - titleLabelX, 26)];
132 | titleLabel.adjustsFontSizeToFitWidth = NO;
133 | titleLabel.lineBreakMode = NSLineBreakByClipping;
134 | [titleLabel setFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:20]];
135 | [titleLabel setTextColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.8]];
136 | titleLabel.text = @"Title Label";
137 |
138 | // Register touch events on the label
139 | titleLabel.userInteractionEnabled = YES;
140 | UITapGestureRecognizer *tapGesture =
141 | [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(titleLabelTap)];
142 | [titleLabel addGestureRecognizer:tapGesture];
143 |
144 | // Register touch events on the cover image
145 | coverImageView.userInteractionEnabled = YES;
146 | UITapGestureRecognizer *tapGestureCover =
147 | [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(coverPhotoTap)];
148 | [coverImageView addGestureRecognizer:tapGestureCover];
149 |
150 | // Register touch events on the profile imate
151 | profileImageView.userInteractionEnabled = YES;
152 | UITapGestureRecognizer *tapGestureProfile =
153 | [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(profilePhotoTap)];
154 | [profileImageView addGestureRecognizer:tapGestureProfile];
155 |
156 | // building upp the views
157 | [self addSubview:titleLabel];
158 | [self addSubview:cp_mask];
159 | [self addSubview:pp_circle];
160 | [self addSubview:pp_mask];
161 | [coverImageView addSubview:visualEffectView];
162 | }
163 |
164 | -(void)titleLabelTap{
165 | if (self.delegate != nil && [self.delegate respondsToSelector:@selector(nameTap)]) {
166 | [self.delegate nameTap];
167 | }
168 | }
169 |
170 | -(void)coverPhotoTap{
171 | if (self.delegate != nil && [self.delegate respondsToSelector:@selector(coverPhotoTap)]) {
172 | [self.delegate coverPhotoTap];
173 | }
174 | }
175 |
176 | -(void)profilePhotoTap{
177 | if (self.delegate != nil && [self.delegate respondsToSelector:@selector(profilePhotoTap)]) {
178 | [self.delegate profilePhotoTap];
179 | }
180 | }
181 |
182 |
183 | -(void)addBlur
184 | {
185 | visualEffectView.alpha = 1;
186 | }
187 |
188 | -(void)removeBlur
189 | {
190 | visualEffectView.alpha = 0;
191 | }
192 |
193 | @end
194 |
--------------------------------------------------------------------------------
/RKCard/RKCard.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 998810FE1A1BB522005045C3 /* RKCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 998810FD1A1BB522005045C3 /* RKCardView.swift */; };
11 | 99B7F2611A0AAB4E00E8EC51 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 99B7F2601A0AAB4E00E8EC51 /* main.m */; };
12 | 99B7F2641A0AAB4E00E8EC51 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 99B7F2631A0AAB4E00E8EC51 /* AppDelegate.m */; };
13 | 99B7F2671A0AAB4E00E8EC51 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 99B7F2661A0AAB4E00E8EC51 /* ViewController.m */; };
14 | 99B7F26A1A0AAB4E00E8EC51 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 99B7F2681A0AAB4E00E8EC51 /* Main.storyboard */; };
15 | 99B7F26C1A0AAB4E00E8EC51 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 99B7F26B1A0AAB4E00E8EC51 /* Images.xcassets */; };
16 | 99B7F26F1A0AAB4E00E8EC51 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 99B7F26D1A0AAB4E00E8EC51 /* LaunchScreen.xib */; };
17 | 99B7F27B1A0AAB4E00E8EC51 /* RKCardTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 99B7F27A1A0AAB4E00E8EC51 /* RKCardTests.m */; };
18 | 99B7F2861A0AABC100E8EC51 /* RKCardView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99B7F2851A0AABC100E8EC51 /* RKCardView.m */; };
19 | /* End PBXBuildFile section */
20 |
21 | /* Begin PBXContainerItemProxy section */
22 | 99B7F2751A0AAB4E00E8EC51 /* PBXContainerItemProxy */ = {
23 | isa = PBXContainerItemProxy;
24 | containerPortal = 99B7F2531A0AAB4D00E8EC51 /* Project object */;
25 | proxyType = 1;
26 | remoteGlobalIDString = 99B7F25A1A0AAB4E00E8EC51;
27 | remoteInfo = RKCard;
28 | };
29 | /* End PBXContainerItemProxy section */
30 |
31 | /* Begin PBXFileReference section */
32 | 998810FC1A1BB521005045C3 /* RKCard-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RKCard-Bridging-Header.h"; sourceTree = ""; };
33 | 998810FD1A1BB522005045C3 /* RKCardView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RKCardView.swift; sourceTree = ""; };
34 | 99B7F25B1A0AAB4E00E8EC51 /* RKCard.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RKCard.app; sourceTree = BUILT_PRODUCTS_DIR; };
35 | 99B7F25F1A0AAB4E00E8EC51 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
36 | 99B7F2601A0AAB4E00E8EC51 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
37 | 99B7F2621A0AAB4E00E8EC51 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
38 | 99B7F2631A0AAB4E00E8EC51 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
39 | 99B7F2651A0AAB4E00E8EC51 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; };
40 | 99B7F2661A0AAB4E00E8EC51 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; };
41 | 99B7F2691A0AAB4E00E8EC51 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
42 | 99B7F26B1A0AAB4E00E8EC51 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
43 | 99B7F26E1A0AAB4E00E8EC51 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
44 | 99B7F2741A0AAB4E00E8EC51 /* RKCardTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RKCardTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
45 | 99B7F2791A0AAB4E00E8EC51 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
46 | 99B7F27A1A0AAB4E00E8EC51 /* RKCardTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RKCardTests.m; sourceTree = ""; };
47 | 99B7F2841A0AABC100E8EC51 /* RKCardView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RKCardView.h; sourceTree = ""; };
48 | 99B7F2851A0AABC100E8EC51 /* RKCardView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RKCardView.m; sourceTree = ""; };
49 | /* End PBXFileReference section */
50 |
51 | /* Begin PBXFrameworksBuildPhase section */
52 | 99B7F2581A0AAB4E00E8EC51 /* Frameworks */ = {
53 | isa = PBXFrameworksBuildPhase;
54 | buildActionMask = 2147483647;
55 | files = (
56 | );
57 | runOnlyForDeploymentPostprocessing = 0;
58 | };
59 | 99B7F2711A0AAB4E00E8EC51 /* Frameworks */ = {
60 | isa = PBXFrameworksBuildPhase;
61 | buildActionMask = 2147483647;
62 | files = (
63 | );
64 | runOnlyForDeploymentPostprocessing = 0;
65 | };
66 | /* End PBXFrameworksBuildPhase section */
67 |
68 | /* Begin PBXGroup section */
69 | 998810FF1A1BB52A005045C3 /* Swift */ = {
70 | isa = PBXGroup;
71 | children = (
72 | 998810FC1A1BB521005045C3 /* RKCard-Bridging-Header.h */,
73 | 998810FD1A1BB522005045C3 /* RKCardView.swift */,
74 | );
75 | name = Swift;
76 | sourceTree = "";
77 | };
78 | 99B7F2521A0AAB4D00E8EC51 = {
79 | isa = PBXGroup;
80 | children = (
81 | 99B7F25D1A0AAB4E00E8EC51 /* RKCard */,
82 | 99B7F2771A0AAB4E00E8EC51 /* RKCardTests */,
83 | 99B7F25C1A0AAB4E00E8EC51 /* Products */,
84 | );
85 | sourceTree = "";
86 | };
87 | 99B7F25C1A0AAB4E00E8EC51 /* Products */ = {
88 | isa = PBXGroup;
89 | children = (
90 | 99B7F25B1A0AAB4E00E8EC51 /* RKCard.app */,
91 | 99B7F2741A0AAB4E00E8EC51 /* RKCardTests.xctest */,
92 | );
93 | name = Products;
94 | sourceTree = "";
95 | };
96 | 99B7F25D1A0AAB4E00E8EC51 /* RKCard */ = {
97 | isa = PBXGroup;
98 | children = (
99 | 99B7F2621A0AAB4E00E8EC51 /* AppDelegate.h */,
100 | 99B7F2631A0AAB4E00E8EC51 /* AppDelegate.m */,
101 | 99B7F2651A0AAB4E00E8EC51 /* ViewController.h */,
102 | 99B7F2661A0AAB4E00E8EC51 /* ViewController.m */,
103 | 99B7F2841A0AABC100E8EC51 /* RKCardView.h */,
104 | 99B7F2851A0AABC100E8EC51 /* RKCardView.m */,
105 | 998810FF1A1BB52A005045C3 /* Swift */,
106 | 99B7F2681A0AAB4E00E8EC51 /* Main.storyboard */,
107 | 99B7F26B1A0AAB4E00E8EC51 /* Images.xcassets */,
108 | 99B7F26D1A0AAB4E00E8EC51 /* LaunchScreen.xib */,
109 | 99B7F25E1A0AAB4E00E8EC51 /* Supporting Files */,
110 | );
111 | path = RKCard;
112 | sourceTree = "";
113 | };
114 | 99B7F25E1A0AAB4E00E8EC51 /* Supporting Files */ = {
115 | isa = PBXGroup;
116 | children = (
117 | 99B7F25F1A0AAB4E00E8EC51 /* Info.plist */,
118 | 99B7F2601A0AAB4E00E8EC51 /* main.m */,
119 | );
120 | name = "Supporting Files";
121 | sourceTree = "";
122 | };
123 | 99B7F2771A0AAB4E00E8EC51 /* RKCardTests */ = {
124 | isa = PBXGroup;
125 | children = (
126 | 99B7F27A1A0AAB4E00E8EC51 /* RKCardTests.m */,
127 | 99B7F2781A0AAB4E00E8EC51 /* Supporting Files */,
128 | );
129 | path = RKCardTests;
130 | sourceTree = "";
131 | };
132 | 99B7F2781A0AAB4E00E8EC51 /* Supporting Files */ = {
133 | isa = PBXGroup;
134 | children = (
135 | 99B7F2791A0AAB4E00E8EC51 /* Info.plist */,
136 | );
137 | name = "Supporting Files";
138 | sourceTree = "";
139 | };
140 | /* End PBXGroup section */
141 |
142 | /* Begin PBXNativeTarget section */
143 | 99B7F25A1A0AAB4E00E8EC51 /* RKCard */ = {
144 | isa = PBXNativeTarget;
145 | buildConfigurationList = 99B7F27E1A0AAB4E00E8EC51 /* Build configuration list for PBXNativeTarget "RKCard" */;
146 | buildPhases = (
147 | 99B7F2571A0AAB4E00E8EC51 /* Sources */,
148 | 99B7F2581A0AAB4E00E8EC51 /* Frameworks */,
149 | 99B7F2591A0AAB4E00E8EC51 /* Resources */,
150 | );
151 | buildRules = (
152 | );
153 | dependencies = (
154 | );
155 | name = RKCard;
156 | productName = RKCard;
157 | productReference = 99B7F25B1A0AAB4E00E8EC51 /* RKCard.app */;
158 | productType = "com.apple.product-type.application";
159 | };
160 | 99B7F2731A0AAB4E00E8EC51 /* RKCardTests */ = {
161 | isa = PBXNativeTarget;
162 | buildConfigurationList = 99B7F2811A0AAB4E00E8EC51 /* Build configuration list for PBXNativeTarget "RKCardTests" */;
163 | buildPhases = (
164 | 99B7F2701A0AAB4E00E8EC51 /* Sources */,
165 | 99B7F2711A0AAB4E00E8EC51 /* Frameworks */,
166 | 99B7F2721A0AAB4E00E8EC51 /* Resources */,
167 | );
168 | buildRules = (
169 | );
170 | dependencies = (
171 | 99B7F2761A0AAB4E00E8EC51 /* PBXTargetDependency */,
172 | );
173 | name = RKCardTests;
174 | productName = RKCardTests;
175 | productReference = 99B7F2741A0AAB4E00E8EC51 /* RKCardTests.xctest */;
176 | productType = "com.apple.product-type.bundle.unit-test";
177 | };
178 | /* End PBXNativeTarget section */
179 |
180 | /* Begin PBXProject section */
181 | 99B7F2531A0AAB4D00E8EC51 /* Project object */ = {
182 | isa = PBXProject;
183 | attributes = {
184 | LastUpgradeCheck = 0610;
185 | ORGANIZATIONNAME = "Richard Kim";
186 | TargetAttributes = {
187 | 99B7F25A1A0AAB4E00E8EC51 = {
188 | CreatedOnToolsVersion = 6.1;
189 | };
190 | 99B7F2731A0AAB4E00E8EC51 = {
191 | CreatedOnToolsVersion = 6.1;
192 | TestTargetID = 99B7F25A1A0AAB4E00E8EC51;
193 | };
194 | };
195 | };
196 | buildConfigurationList = 99B7F2561A0AAB4D00E8EC51 /* Build configuration list for PBXProject "RKCard" */;
197 | compatibilityVersion = "Xcode 3.2";
198 | developmentRegion = English;
199 | hasScannedForEncodings = 0;
200 | knownRegions = (
201 | en,
202 | Base,
203 | );
204 | mainGroup = 99B7F2521A0AAB4D00E8EC51;
205 | productRefGroup = 99B7F25C1A0AAB4E00E8EC51 /* Products */;
206 | projectDirPath = "";
207 | projectRoot = "";
208 | targets = (
209 | 99B7F25A1A0AAB4E00E8EC51 /* RKCard */,
210 | 99B7F2731A0AAB4E00E8EC51 /* RKCardTests */,
211 | );
212 | };
213 | /* End PBXProject section */
214 |
215 | /* Begin PBXResourcesBuildPhase section */
216 | 99B7F2591A0AAB4E00E8EC51 /* Resources */ = {
217 | isa = PBXResourcesBuildPhase;
218 | buildActionMask = 2147483647;
219 | files = (
220 | 99B7F26A1A0AAB4E00E8EC51 /* Main.storyboard in Resources */,
221 | 99B7F26F1A0AAB4E00E8EC51 /* LaunchScreen.xib in Resources */,
222 | 99B7F26C1A0AAB4E00E8EC51 /* Images.xcassets in Resources */,
223 | );
224 | runOnlyForDeploymentPostprocessing = 0;
225 | };
226 | 99B7F2721A0AAB4E00E8EC51 /* Resources */ = {
227 | isa = PBXResourcesBuildPhase;
228 | buildActionMask = 2147483647;
229 | files = (
230 | );
231 | runOnlyForDeploymentPostprocessing = 0;
232 | };
233 | /* End PBXResourcesBuildPhase section */
234 |
235 | /* Begin PBXSourcesBuildPhase section */
236 | 99B7F2571A0AAB4E00E8EC51 /* Sources */ = {
237 | isa = PBXSourcesBuildPhase;
238 | buildActionMask = 2147483647;
239 | files = (
240 | 99B7F2671A0AAB4E00E8EC51 /* ViewController.m in Sources */,
241 | 99B7F2861A0AABC100E8EC51 /* RKCardView.m in Sources */,
242 | 99B7F2641A0AAB4E00E8EC51 /* AppDelegate.m in Sources */,
243 | 998810FE1A1BB522005045C3 /* RKCardView.swift in Sources */,
244 | 99B7F2611A0AAB4E00E8EC51 /* main.m in Sources */,
245 | );
246 | runOnlyForDeploymentPostprocessing = 0;
247 | };
248 | 99B7F2701A0AAB4E00E8EC51 /* Sources */ = {
249 | isa = PBXSourcesBuildPhase;
250 | buildActionMask = 2147483647;
251 | files = (
252 | 99B7F27B1A0AAB4E00E8EC51 /* RKCardTests.m in Sources */,
253 | );
254 | runOnlyForDeploymentPostprocessing = 0;
255 | };
256 | /* End PBXSourcesBuildPhase section */
257 |
258 | /* Begin PBXTargetDependency section */
259 | 99B7F2761A0AAB4E00E8EC51 /* PBXTargetDependency */ = {
260 | isa = PBXTargetDependency;
261 | target = 99B7F25A1A0AAB4E00E8EC51 /* RKCard */;
262 | targetProxy = 99B7F2751A0AAB4E00E8EC51 /* PBXContainerItemProxy */;
263 | };
264 | /* End PBXTargetDependency section */
265 |
266 | /* Begin PBXVariantGroup section */
267 | 99B7F2681A0AAB4E00E8EC51 /* Main.storyboard */ = {
268 | isa = PBXVariantGroup;
269 | children = (
270 | 99B7F2691A0AAB4E00E8EC51 /* Base */,
271 | );
272 | name = Main.storyboard;
273 | sourceTree = "";
274 | };
275 | 99B7F26D1A0AAB4E00E8EC51 /* LaunchScreen.xib */ = {
276 | isa = PBXVariantGroup;
277 | children = (
278 | 99B7F26E1A0AAB4E00E8EC51 /* Base */,
279 | );
280 | name = LaunchScreen.xib;
281 | sourceTree = "";
282 | };
283 | /* End PBXVariantGroup section */
284 |
285 | /* Begin XCBuildConfiguration section */
286 | 99B7F27C1A0AAB4E00E8EC51 /* Debug */ = {
287 | isa = XCBuildConfiguration;
288 | buildSettings = {
289 | ALWAYS_SEARCH_USER_PATHS = NO;
290 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
291 | CLANG_CXX_LIBRARY = "libc++";
292 | CLANG_ENABLE_MODULES = YES;
293 | CLANG_ENABLE_OBJC_ARC = YES;
294 | CLANG_WARN_BOOL_CONVERSION = YES;
295 | CLANG_WARN_CONSTANT_CONVERSION = YES;
296 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
297 | CLANG_WARN_EMPTY_BODY = YES;
298 | CLANG_WARN_ENUM_CONVERSION = YES;
299 | CLANG_WARN_INT_CONVERSION = YES;
300 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
301 | CLANG_WARN_UNREACHABLE_CODE = YES;
302 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
303 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
304 | COPY_PHASE_STRIP = NO;
305 | ENABLE_STRICT_OBJC_MSGSEND = YES;
306 | GCC_C_LANGUAGE_STANDARD = gnu99;
307 | GCC_DYNAMIC_NO_PIC = NO;
308 | GCC_OPTIMIZATION_LEVEL = 0;
309 | GCC_PREPROCESSOR_DEFINITIONS = (
310 | "DEBUG=1",
311 | "$(inherited)",
312 | );
313 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
314 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
315 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
316 | GCC_WARN_UNDECLARED_SELECTOR = YES;
317 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
318 | GCC_WARN_UNUSED_FUNCTION = YES;
319 | GCC_WARN_UNUSED_VARIABLE = YES;
320 | IPHONEOS_DEPLOYMENT_TARGET = 8.1;
321 | MTL_ENABLE_DEBUG_INFO = YES;
322 | ONLY_ACTIVE_ARCH = YES;
323 | SDKROOT = iphoneos;
324 | };
325 | name = Debug;
326 | };
327 | 99B7F27D1A0AAB4E00E8EC51 /* Release */ = {
328 | isa = XCBuildConfiguration;
329 | buildSettings = {
330 | ALWAYS_SEARCH_USER_PATHS = NO;
331 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
332 | CLANG_CXX_LIBRARY = "libc++";
333 | CLANG_ENABLE_MODULES = YES;
334 | CLANG_ENABLE_OBJC_ARC = YES;
335 | CLANG_WARN_BOOL_CONVERSION = YES;
336 | CLANG_WARN_CONSTANT_CONVERSION = YES;
337 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
338 | CLANG_WARN_EMPTY_BODY = YES;
339 | CLANG_WARN_ENUM_CONVERSION = YES;
340 | CLANG_WARN_INT_CONVERSION = YES;
341 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
342 | CLANG_WARN_UNREACHABLE_CODE = YES;
343 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
344 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
345 | COPY_PHASE_STRIP = YES;
346 | ENABLE_NS_ASSERTIONS = NO;
347 | ENABLE_STRICT_OBJC_MSGSEND = YES;
348 | GCC_C_LANGUAGE_STANDARD = gnu99;
349 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
350 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
351 | GCC_WARN_UNDECLARED_SELECTOR = YES;
352 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
353 | GCC_WARN_UNUSED_FUNCTION = YES;
354 | GCC_WARN_UNUSED_VARIABLE = YES;
355 | IPHONEOS_DEPLOYMENT_TARGET = 8.1;
356 | MTL_ENABLE_DEBUG_INFO = NO;
357 | SDKROOT = iphoneos;
358 | VALIDATE_PRODUCT = YES;
359 | };
360 | name = Release;
361 | };
362 | 99B7F27F1A0AAB4E00E8EC51 /* Debug */ = {
363 | isa = XCBuildConfiguration;
364 | buildSettings = {
365 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
366 | CLANG_ENABLE_MODULES = YES;
367 | INFOPLIST_FILE = RKCard/Info.plist;
368 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
369 | PRODUCT_NAME = "$(TARGET_NAME)";
370 | SWIFT_OBJC_BRIDGING_HEADER = "RKCard/RKCard-Bridging-Header.h";
371 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
372 | };
373 | name = Debug;
374 | };
375 | 99B7F2801A0AAB4E00E8EC51 /* Release */ = {
376 | isa = XCBuildConfiguration;
377 | buildSettings = {
378 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
379 | CLANG_ENABLE_MODULES = YES;
380 | INFOPLIST_FILE = RKCard/Info.plist;
381 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
382 | PRODUCT_NAME = "$(TARGET_NAME)";
383 | SWIFT_OBJC_BRIDGING_HEADER = "RKCard/RKCard-Bridging-Header.h";
384 | };
385 | name = Release;
386 | };
387 | 99B7F2821A0AAB4E00E8EC51 /* Debug */ = {
388 | isa = XCBuildConfiguration;
389 | buildSettings = {
390 | BUNDLE_LOADER = "$(TEST_HOST)";
391 | FRAMEWORK_SEARCH_PATHS = (
392 | "$(SDKROOT)/Developer/Library/Frameworks",
393 | "$(inherited)",
394 | );
395 | GCC_PREPROCESSOR_DEFINITIONS = (
396 | "DEBUG=1",
397 | "$(inherited)",
398 | );
399 | INFOPLIST_FILE = RKCardTests/Info.plist;
400 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
401 | PRODUCT_NAME = "$(TARGET_NAME)";
402 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RKCard.app/RKCard";
403 | };
404 | name = Debug;
405 | };
406 | 99B7F2831A0AAB4E00E8EC51 /* Release */ = {
407 | isa = XCBuildConfiguration;
408 | buildSettings = {
409 | BUNDLE_LOADER = "$(TEST_HOST)";
410 | FRAMEWORK_SEARCH_PATHS = (
411 | "$(SDKROOT)/Developer/Library/Frameworks",
412 | "$(inherited)",
413 | );
414 | INFOPLIST_FILE = RKCardTests/Info.plist;
415 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
416 | PRODUCT_NAME = "$(TARGET_NAME)";
417 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RKCard.app/RKCard";
418 | };
419 | name = Release;
420 | };
421 | /* End XCBuildConfiguration section */
422 |
423 | /* Begin XCConfigurationList section */
424 | 99B7F2561A0AAB4D00E8EC51 /* Build configuration list for PBXProject "RKCard" */ = {
425 | isa = XCConfigurationList;
426 | buildConfigurations = (
427 | 99B7F27C1A0AAB4E00E8EC51 /* Debug */,
428 | 99B7F27D1A0AAB4E00E8EC51 /* Release */,
429 | );
430 | defaultConfigurationIsVisible = 0;
431 | defaultConfigurationName = Release;
432 | };
433 | 99B7F27E1A0AAB4E00E8EC51 /* Build configuration list for PBXNativeTarget "RKCard" */ = {
434 | isa = XCConfigurationList;
435 | buildConfigurations = (
436 | 99B7F27F1A0AAB4E00E8EC51 /* Debug */,
437 | 99B7F2801A0AAB4E00E8EC51 /* Release */,
438 | );
439 | defaultConfigurationIsVisible = 0;
440 | defaultConfigurationName = Release;
441 | };
442 | 99B7F2811A0AAB4E00E8EC51 /* Build configuration list for PBXNativeTarget "RKCardTests" */ = {
443 | isa = XCConfigurationList;
444 | buildConfigurations = (
445 | 99B7F2821A0AAB4E00E8EC51 /* Debug */,
446 | 99B7F2831A0AAB4E00E8EC51 /* Release */,
447 | );
448 | defaultConfigurationIsVisible = 0;
449 | defaultConfigurationName = Release;
450 | };
451 | /* End XCConfigurationList section */
452 | };
453 | rootObject = 99B7F2531A0AAB4D00E8EC51 /* Project object */;
454 | }
455 |
--------------------------------------------------------------------------------