├── .DS_Store
├── XTPopView
├── 付款.png
├── 发起群聊.png
├── 扫一扫.png
├── 添加朋友.png
├── .DS_Store
├── ViewController.h
├── AppDelegate.h
├── XTPopView
│ ├── XTPopView.h
│ ├── XTPopNormalView.h
│ ├── XTPopTableView.h
│ ├── XTPopViewBase.h
│ ├── XTPopTableView.m
│ ├── XTPopNormalView.m
│ └── XTPopViewBase.m
├── main.m
├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Base.lproj
│ ├── Main.storyboard
│ └── LaunchScreen.storyboard
├── Info.plist
├── AppDelegate.m
└── ViewController.m
├── XTPopView.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── project.pbxproj
├── XTPopViewSwift.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── project.pbxproj
├── XTPopView.podspec
├── XTPopViewTests
├── Info.plist
└── XTPopViewTests.m
├── XTPopViewUITests
├── Info.plist
└── XTPopViewUITests.m
├── LICENSE
├── XTPopViewSwift
├── ViewController.swift
├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Info.plist
├── Base.lproj
│ ├── Main.storyboard
│ └── LaunchScreen.storyboard
├── AppDelegate.swift
└── XTPopViewSwift.swift
├── .gitignore
└── README.md
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/.DS_Store
--------------------------------------------------------------------------------
/XTPopView/付款.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/XTPopView/付款.png
--------------------------------------------------------------------------------
/XTPopView/发起群聊.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/XTPopView/发起群聊.png
--------------------------------------------------------------------------------
/XTPopView/扫一扫.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/XTPopView/扫一扫.png
--------------------------------------------------------------------------------
/XTPopView/添加朋友.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/XTPopView/添加朋友.png
--------------------------------------------------------------------------------
/XTPopView/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/summerxx27/XTPopView/HEAD/XTPopView/.DS_Store
--------------------------------------------------------------------------------
/XTPopView.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/XTPopViewSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/XTPopView/ViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.h
3 | // XTPopView
4 | //
5 | // Created by zjwang on 16/5/23.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ViewController : UIViewController
12 |
13 |
14 | @end
15 |
16 |
--------------------------------------------------------------------------------
/XTPopView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/XTPopViewSwift.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/XTPopView/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // XTPopView
4 | //
5 | // Created by zjwang on 16/5/23.
6 | // Copyright © 2016年 夏天. 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 |
--------------------------------------------------------------------------------
/XTPopView/XTPopView/XTPopView.h:
--------------------------------------------------------------------------------
1 | //
2 | // XTPopView.h
3 | // XTPopView
4 | //
5 | // Created by zjwang on 16/7/7.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #ifndef XTPopView_h
10 | #define XTPopView_h
11 |
12 | #import "XTPopViewBase.h"
13 | #import "XTPopTableView.h"
14 | #import "XTPopNormalView.h"
15 |
16 | #endif /* XTPopView_h */
17 |
--------------------------------------------------------------------------------
/XTPopView/XTPopView/XTPopNormalView.h:
--------------------------------------------------------------------------------
1 | //
2 | // XTPopNormalView.h
3 | // XTPopView
4 | //
5 | // Created by Mac on 16/7/27.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #import "XTPopViewBase.h"
10 |
11 | @interface XTPopNormalView : XTPopViewBase
12 | @property (nonatomic, strong) UIButton *btnDiss;
13 | - (void)popViewNormal;
14 |
15 |
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/XTPopView/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // XTPopView
4 | //
5 | // Created by zjwang on 16/5/23.
6 | // Copyright © 2016年 夏天. 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 |
--------------------------------------------------------------------------------
/XTPopView.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = 'XTPopView'
3 | s.version = '1.0.1'
4 | s.license = 'MIT'
5 | s.summary = 'An view like XTPopView on iOS.'
6 | s.homepage = 'https://github.com/summerxx27/XTPopView'
7 | s.authors = { 'summerxx27' => '1005430006@qq.com' }
8 | s.source = { :git => 'https://github.com/summerxx27/XTPopView.git', :tag => s.version.to_s }
9 | s.requires_arc = true
10 | s.ios.deployment_target = '7.0'
11 | s.source_files = 'XTPopView/XTPopView/*.{h,m}'
12 | end
13 |
14 |
--------------------------------------------------------------------------------
/XTPopViewTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
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 |
--------------------------------------------------------------------------------
/XTPopViewUITests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
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 |
--------------------------------------------------------------------------------
/XTPopView/XTPopView/XTPopTableView.h:
--------------------------------------------------------------------------------
1 | //
2 | // XTPopTableView.h
3 | // XTPopView
4 | //
5 | // Created by zjwang on 16/7/7.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #import "XTPopViewBase.h"
10 | @protocol SelectIndexPathDelegate
11 |
12 | - (void)selectIndexPathRow:(NSInteger )index;
13 |
14 | @end
15 |
16 | @interface XTPopTableView : XTPopViewBase
17 | // titles
18 | @property (nonatomic, strong) NSArray * _Nonnull dataArray;
19 | // images
20 | @property (nonatomic, strong) NSArray * _Nonnull images;
21 | // height
22 | @property (nonatomic, assign) CGFloat row_height;
23 | // font
24 | @property (nonatomic, assign) CGFloat fontSize;
25 | // textColor
26 | @property (nonatomic, strong) UIColor * _Nonnull titleTextColor;
27 | @property (nonatomic, assign) NSTextAlignment textAlignment;
28 | // delegate
29 | @property (nonatomic, assign) id _Nonnull delegate;
30 | @end
31 |
--------------------------------------------------------------------------------
/XTPopViewTests/XTPopViewTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // XTPopViewTests.m
3 | // XTPopViewTests
4 | //
5 | // Created by zjwang on 16/5/23.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface XTPopViewTests : XCTestCase
12 |
13 | @end
14 |
15 | @implementation XTPopViewTests
16 |
17 | - (void)setUp {
18 | [super setUp];
19 | // Put setup code here. This method is called before the invocation of each test method in the class.
20 | }
21 |
22 | - (void)tearDown {
23 | // Put teardown code here. This method is called after the invocation of each test method in the class.
24 | [super tearDown];
25 | }
26 |
27 | - (void)testExample {
28 | // This is an example of a functional test case.
29 | // Use XCTAssert and related functions to verify your tests produce the correct results.
30 | }
31 |
32 | - (void)testPerformanceExample {
33 | // This is an example of a performance test case.
34 | [self measureBlock:^{
35 | // Put the code you want to measure the time of here.
36 | }];
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Zhang Jingwang
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/XTPopViewSwift/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // XTPopViewSwift
4 | //
5 | // Created by summerxx on 2016/11/15.
6 | // Copyright © 2016年 summerxx. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ViewController: UIViewController {
12 |
13 | var btn = UIButton()
14 | override func viewDidLoad() {
15 | super.viewDidLoad()
16 |
17 |
18 | btn = UIButton.init(type: UIButtonType.custom)
19 | btn.frame = CGRect.init(x: 0, y: 0, width: 88, height: 88)
20 | btn.center = self.view.center
21 | self.view.addSubview(btn)
22 | btn.backgroundColor = UIColor.cyan
23 | btn.addTarget(self, action: #selector(ViewController.btnClick), for: UIControlEvents.touchUpInside)
24 | }
25 | func btnClick(){
26 | let popView = XTPopViewSwift.init(origin: CGPoint.init(x: self.btn.center.x, y: self.btn.center.y), width: 100, height: 200)
27 | popView.bgView.backgroundColor = UIColor.black
28 | popView.popView()
29 |
30 | }
31 |
32 | override func didReceiveMemoryWarning() {
33 | super.didReceiveMemoryWarning()
34 | // Dispose of any resources that can be recreated.
35 | }
36 |
37 |
38 | }
39 |
40 |
--------------------------------------------------------------------------------
/XTPopViewUITests/XTPopViewUITests.m:
--------------------------------------------------------------------------------
1 | //
2 | // XTPopViewUITests.m
3 | // XTPopViewUITests
4 | //
5 | // Created by zjwang on 16/5/23.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface XTPopViewUITests : XCTestCase
12 |
13 | @end
14 |
15 | @implementation XTPopViewUITests
16 |
17 | - (void)setUp {
18 | [super setUp];
19 |
20 | // Put setup code here. This method is called before the invocation of each test method in the class.
21 |
22 | // In UI tests it is usually best to stop immediately when a failure occurs.
23 | self.continueAfterFailure = NO;
24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
25 | [[[XCUIApplication alloc] init] launch];
26 |
27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
28 | }
29 |
30 | - (void)tearDown {
31 | // Put teardown code here. This method is called after the invocation of each test method in the class.
32 | [super tearDown];
33 | }
34 |
35 | - (void)testExample {
36 | // Use recording to get started writing UI tests.
37 | // Use XCTAssert and related functions to verify your tests produce the correct results.
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata
19 |
20 | ## Other
21 | *.xccheckout
22 | *.moved-aside
23 | *.xcuserstate
24 | *.xcscmblueprint
25 |
26 | ## Obj-C/Swift specific
27 | *.hmap
28 | *.ipa
29 |
30 | # CocoaPods
31 | #
32 | # We recommend against adding the Pods directory to your .gitignore. However
33 | # you should judge for yourself, the pros and cons are mentioned at:
34 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
35 | #
36 | # Pods/
37 |
38 | # Carthage
39 | #
40 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
41 | # Carthage/Checkouts
42 |
43 | Carthage/Build
44 |
45 | # fastlane
46 | #
47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
48 | # screenshots whenever they are needed.
49 | # For more information about the recommended setup visit:
50 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md
51 |
52 | fastlane/report.xml
53 | fastlane/screenshots
54 |
--------------------------------------------------------------------------------
/XTPopViewSwift/Assets.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 | "idiom" : "ipad",
35 | "size" : "29x29",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "ipad",
40 | "size" : "29x29",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "40x40",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "40x40",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "76x76",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "76x76",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
--------------------------------------------------------------------------------
/XTPopView/Assets.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 | "idiom" : "ipad",
35 | "size" : "29x29",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "ipad",
40 | "size" : "29x29",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "40x40",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "40x40",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "76x76",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "76x76",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "83.5x83.5",
66 | "scale" : "2x"
67 | }
68 | ],
69 | "info" : {
70 | "version" : 1,
71 | "author" : "xcode"
72 | }
73 | }
--------------------------------------------------------------------------------
/XTPopView/XTPopView/XTPopViewBase.h:
--------------------------------------------------------------------------------
1 | //
2 | // XTPopView.h
3 | // XTPopView
4 | //
5 | // Created by zjwang on 16/5/23.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #import
10 | #define ScreenWidth [UIScreen mainScreen].bounds.size.width
11 | #define ScreenHeight [UIScreen mainScreen].bounds.size.height
12 | #define Length 5
13 | #define Length2 15
14 | typedef NS_ENUM(NSInteger, XTDirectionType)
15 | {
16 | XTTypeOfUpLeft, // 上左
17 | XTTypeOfUpCenter, // 上中
18 | XTTypeOfUpRight, // 上右
19 |
20 | XTTypeOfDownLeft, // 下左
21 | XTTypeOfDownCenter, // 下中
22 | XTTypeOfDownRight, // 下右
23 |
24 | XTTypeOfLeftUp, // 左上
25 | XTTypeOfLeftCenter, // 左中
26 | XTTypeOfLeftDown, // 左下
27 |
28 | XTTypeOfRightUp, // 右上
29 | XTTypeOfRightCenter,// 右中
30 | XTTypeOfRightDown, // 右下
31 |
32 | };
33 |
34 |
35 | @interface XTPopViewBase : UIView
36 |
37 | // backGoundView
38 | @property (nonatomic, strong) UIView * _Nonnull backGoundView;
39 |
40 | @property (nonatomic, assign) CGPoint origin;
41 |
42 | @property (nonatomic, assign) CGFloat height;
43 |
44 | @property (nonatomic, assign) CGFloat width;
45 |
46 | @property (nonatomic, assign) XTDirectionType type;
47 |
48 | // 初始化方法
49 | - (instancetype _Nonnull)initWithOrigin:(CGPoint) origin
50 | Width:(CGFloat) width
51 | Height:(CGFloat) height
52 | Type:(XTDirectionType)type
53 | Color:( UIColor * _Nonnull ) color;
54 |
55 | - (void)popView;
56 |
57 | @end
58 |
--------------------------------------------------------------------------------
/XTPopViewSwift/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/XTPopView/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 |
--------------------------------------------------------------------------------
/XTPopView/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
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 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/XTPopView/Base.lproj/LaunchScreen.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 |
27 |
28 |
--------------------------------------------------------------------------------
/XTPopViewSwift/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 |
27 |
--------------------------------------------------------------------------------
/XTPopViewSwift/Base.lproj/LaunchScreen.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 |
27 |
28 |
--------------------------------------------------------------------------------
/XTPopViewSwift/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // XTPopViewSwift
4 | //
5 | // Created by summerxx on 2016/11/15.
6 | // Copyright © 2016年 summerxx. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 |
17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
18 | // Override point for customization after application launch.
19 | return true
20 | }
21 |
22 | func applicationWillResignActive(_ application: UIApplication) {
23 | // 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.
24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
25 | }
26 |
27 | func applicationDidEnterBackground(_ application: UIApplication) {
28 | // 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.
29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
30 | }
31 |
32 | func applicationWillEnterForeground(_ application: UIApplication) {
33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
34 | }
35 |
36 | func applicationDidBecomeActive(_ application: UIApplication) {
37 | // 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.
38 | }
39 |
40 | func applicationWillTerminate(_ application: UIApplication) {
41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
42 | }
43 |
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/XTPopView/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // XTPopView
4 | //
5 | // Created by zjwang on 16/5/23.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 | #import "ViewController.h"
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 |
21 | ViewController *root = [[ViewController alloc] init];
22 | UINavigationController *navRoot = [[UINavigationController alloc] initWithRootViewController:root];
23 | self.window.rootViewController = navRoot;
24 | return YES;
25 | }
26 |
27 | - (void)applicationWillResignActive:(UIApplication *)application {
28 | // 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.
29 | // 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.
30 | }
31 |
32 | - (void)applicationDidEnterBackground:(UIApplication *)application {
33 | // 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.
34 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
35 | }
36 |
37 | - (void)applicationWillEnterForeground:(UIApplication *)application {
38 | // 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.
39 | }
40 |
41 | - (void)applicationDidBecomeActive:(UIApplication *)application {
42 | // 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.
43 | }
44 |
45 | - (void)applicationWillTerminate:(UIApplication *)application {
46 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
47 | }
48 |
49 | @end
50 |
--------------------------------------------------------------------------------
/XTPopView/ViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.m
3 | // XTPopView
4 | //
5 | // Created by zjwang on 16/5/23.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #import "ViewController.h"
10 | #import "XTPopView.h"
11 | @interface ViewController ()
12 | @property(strong,readwrite,nonatomic)UIButton *button;
13 | @end
14 |
15 | @implementation ViewController
16 |
17 | - (void)viewDidLoad {
18 | [super viewDidLoad];
19 | // Do any additional setup after loading the view, typically from a nib.
20 | self.view.backgroundColor = [UIColor whiteColor];
21 | UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
22 | btn.frame = CGRectMake(0, 0, 40, 40);
23 | self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
24 | [btn setTitle:@"➕" forState:UIControlStateNormal];
25 | [btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
26 |
27 | _button = [UIButton buttonWithType:UIButtonTypeCustom];
28 | _button.frame = CGRectMake(0, 0, 100, 50);
29 | _button.center = self.view.center;
30 | [self.view addSubview:_button];
31 | _button.backgroundColor = [UIColor colorWithRed:0.3434 green:0.7864 blue:1.0 alpha:1.0];
32 | [_button addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
33 |
34 | }
35 | - (void)click:(UIButton *)btn
36 | {
37 | CGPoint point = CGPointMake(self.view.frame.size.width - 40, btn.frame.origin.y + btn.frame.size.width + 35);
38 | XTPopTableView *popView = [[XTPopTableView alloc] initWithOrigin:point Width:150 Height:30 * 3 Type:XTTypeOfUpRight Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]];
39 | popView.dataArray = @[@"添加朋友", @"扫一扫", @"付款"];
40 | popView.images = @[@"添加朋友", @"扫一扫", @"付款"];
41 | popView.row_height = 30;
42 | popView.delegate = self;
43 | popView.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0];
44 | [popView popView];
45 | }
46 | - (void)btnClick
47 | {
48 | CGPoint point = self.view.center;
49 | XTPopNormalView * view = [[XTPopNormalView alloc] initWithOrigin:point Width:150 Height:150 Type:XTTypeOfDownCenter Color:[UIColor cyanColor]];
50 | [view.btnDiss setTitle:@"点我 DISSMISS" forState:UIControlStateNormal];
51 | [view popView];
52 |
53 | }
54 | - (void)selectIndexPathRow:(NSInteger )index
55 | {
56 | NSLog(@"Index ======== %ld", index);
57 | }
58 |
59 | - (void)didReceiveMemoryWarning {
60 | [super didReceiveMemoryWarning];
61 | // Dispose of any resources that can be recreated.
62 | }
63 |
64 | @end
65 |
--------------------------------------------------------------------------------
/XTPopView/XTPopView/XTPopTableView.m:
--------------------------------------------------------------------------------
1 | //
2 | // XTPopTableView.m
3 | // XTPopView
4 | //
5 | // Created by zjwang on 16/7/7.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #import "XTPopTableView.h"
10 |
11 | @interface XTPopTableView ()
12 |
13 | @property (nonatomic, strong) UITableView *tableView;
14 |
15 | @end
16 |
17 | @implementation XTPopTableView
18 | - (instancetype)initWithOrigin:(CGPoint)origin Width:(CGFloat)width Height:(CGFloat)height Type:(XTDirectionType)type Color:(UIColor *)color
19 | {
20 | if ([super initWithOrigin:origin Width:width Height:height Type:type Color:color]) {
21 | // 添加tableview
22 | [self.backGoundView addSubview:self.tableView];
23 | }
24 | return self;
25 | }
26 |
27 | #pragma mark -
28 | - (UITableView *)tableView
29 | {
30 | if (!_tableView) {
31 | _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.backGoundView.frame.size.width, self.backGoundView.frame.size.height) style:UITableViewStylePlain];
32 | _tableView.dataSource = self;
33 | _tableView.backgroundColor = [UIColor clearColor];
34 | _tableView.delegate = self;
35 | }
36 | return _tableView;
37 | }
38 | #pragma mark -
39 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
40 | {
41 | return self.dataArray.count;
42 | }
43 | #pragma mark -
44 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
45 | {
46 | if (self.row_height == 0) {
47 | return 44;
48 | }else{
49 | return self.row_height;
50 | }
51 | }
52 | #pragma mark -
53 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
54 | {
55 |
56 | static NSString *cellIdentifier = @"cellIdentifier2";
57 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
58 | if (!cell) {
59 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
60 | }
61 | cell.backgroundColor = [UIColor clearColor];
62 | cell.imageView.image = [UIImage imageNamed:self.images[indexPath.row]];
63 | cell.textLabel.text = self.dataArray[indexPath.row];
64 | cell.textLabel.font = [UIFont systemFontOfSize:self.fontSize];
65 | cell.textLabel.textAlignment = NSTextAlignmentCenter;
66 | cell.textLabel.numberOfLines = 0;
67 | cell.selectionStyle = UITableViewCellSelectionStyleNone;
68 | cell.textLabel.textColor = self.titleTextColor;
69 |
70 | if (self.dataArray.count == 1) {
71 | self.tableView.bounces = NO;
72 | self.tableView.separatorColor = [UIColor clearColor];
73 | }
74 |
75 | return cell;
76 | }
77 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
78 | {
79 | if (self.delegate && [self.delegate respondsToSelector:@selector(selectIndexPathRow:)]) {
80 | [self.delegate selectIndexPathRow:indexPath.row];
81 | [self removeFromSuperview];
82 | }
83 | }
84 |
85 | @end
86 |
--------------------------------------------------------------------------------
/XTPopViewSwift/XTPopViewSwift.swift:
--------------------------------------------------------------------------------
1 | //
2 | // XTPopViewSwift.swift
3 | // XTPopViewSwift
4 | //
5 | // Created by summerxx on 2016/11/15.
6 | // Copyright © 2016年 summerxx. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | enum ArrowOfDirection {
11 | case XTUpCenter
12 | }
13 | class XTPopViewSwift: UIView {
14 |
15 |
16 | var bgView = UIView()
17 | var origin = CGPoint()
18 | var height = 0.0
19 | var width = 0.0
20 | var arrow = ArrowOfDirection.XTUpCenter
21 | // 初始化方法
22 | required init(origin: CGPoint, width: Double, height: Double) {
23 | super.init(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.height))
24 | self.backgroundColor = UIColor.clear
25 | self.origin = origin
26 | self.width = Double(width)
27 | self.height = Double(height)
28 | let x = Double(origin.x)
29 | let y = Double(origin.y)
30 | bgView = UIView.init(frame: CGRect.init(x: x, y: y, width: width, height: height))
31 | self.addSubview(self.bgView)
32 | }
33 | required init?(coder aDecoder: NSCoder) {
34 | fatalError("init(coder:) has not been implemented")
35 | }
36 |
37 | override func draw(_ rect: CGRect) {
38 | let context = UIGraphicsGetCurrentContext()
39 |
40 | let startX = self.origin.x
41 | let startY = self.origin.y
42 |
43 | context?.move(to: CGPoint.init(x: startX, y: startY))
44 | // 画出两条线
45 | context?.addLine(to: CGPoint.init(x: startX + 5.0, y: startY + 5.0))
46 | context?.addLine(to: CGPoint.init(x: startX - 5.0, y: startY + 5.0))
47 |
48 | context?.closePath()
49 | // 填充颜色
50 | self.bgView.backgroundColor?.setFill()
51 | self.backgroundColor?.setStroke()
52 | context?.drawPath(using: CGPathDrawingMode.fillStroke)
53 | }
54 |
55 | func popView()->Void{
56 | // 创建keyWindow
57 | let window = UIApplication.shared.keyWindow
58 | window?.addSubview(self)
59 | self.bgView.frame = CGRect.init(x: self.origin.x, y: self.origin.y + 5.0, width: 0, height: 0)
60 | // 类型CGFloat -> Double
61 | let originX = Double(self.origin.x) - self.width / 2
62 | let originY = Double(self.origin.y) + 5.0
63 | let width = self.width
64 | let height = self.height
65 | // 这里为什么抽出一个方法呢, 如果有很多类型箭头就方便很多, 可以看看OC版本
66 | self.updateFrame(x: originX, y: originY, width: width, height: height)
67 |
68 | }
69 |
70 | func updateFrame(x: Double, y: Double, width: Double, height: Double){
71 | self.bgView.frame = CGRect.init(x: x, y: y, width: width, height: height)
72 | }
73 |
74 | override func touchesBegan(_ touches: Set, with event: UIEvent?) {
75 | // 这里遍历包含UITouch的集合, 从中找到黑色View
76 | for touch: AnyObject in touches {
77 | let t:UITouch = touch as! UITouch
78 | if(!(t.view?.isEqual(self.bgView))!){
79 | self.dismiss()
80 | }
81 | }
82 | }
83 |
84 | func dismiss()->Void{
85 | let delay = DispatchTime.now() + DispatchTimeInterval.seconds(1)
86 | DispatchQueue.main.asyncAfter(deadline: delay) {
87 | // 延迟执行
88 | let res = self.subviews
89 | for view in res {
90 | view.removeFromSuperview()
91 | }
92 | self.removeFromSuperview()
93 | }
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 | 
3 | # XTPopView(支持十二种样式)
4 | ##### 第一种
5 | ```objectivec
6 | - (void)btnClick:(UIButton *)btn
7 | {
8 |
9 | /**
10 | XTTypeOfUpLeft, // 上左
11 | XTTypeOfUpCenter, // 上中
12 | XTTypeOfUpRight, // 上右
13 |
14 | XTTypeOfDownLeft, // 下左
15 | XTTypeOfDownCenter, // 下中
16 | XTTypeOfDownRight, // 下右
17 |
18 | XTTypeOfLeftUp, // 左上
19 | XTTypeOfLeftCenter, // 左中
20 | XTTypeOfLeftDown, // 左下
21 |
22 | XTTypeOfRightUp, // 右上
23 | XTTypeOfRightCenter,// 右中
24 | XTTypeOfRightDown, // 右下
25 | */
26 | switch (btn.tag) {
27 | case 0:
28 | {
29 | // 如果你的控件是属性, 这里可以进行相对布局
30 | CGPoint point = CGPointMake(90 * 1,144);
31 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:300 Height:60 Type:XTTypeOfUpLeft Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]];
32 | view1.delegate = self;
33 | view1.dataArray = @[@"您有一位朋友找您", @"好的 加我的qq群: 498143780"];
34 | view1.row_height = 30;
35 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0];
36 | [view1 popView];
37 | }
38 | break;
39 | case 1:
40 | {
41 | // 如果你的控件是属性, 这里可以进行相对布局
42 | CGPoint point = CGPointMake(90,144 + 86 * 1);
43 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:200 Height:30 Type:XTTypeOfUpCenter Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]];
44 | view1.dataArray = @[@"您有一位朋友找您"];
45 | view1.row_height = 30;
46 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0];
47 | [view1 popView];
48 | }
49 | break;
50 | case 2:
51 | {
52 | // 如果你的控件是属性, 这里可以进行相对布局
53 | CGPoint point = CGPointMake(90,144 + 86 * 2);
54 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:200 Height:30 Type:XTTypeOfDownLeft Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]];
55 | view1.dataArray = @[@"您有一位朋友找您"];
56 | view1.row_height = 30;
57 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0];
58 | [view1 popView];
59 | }
60 | break;
61 | case 3:
62 | {
63 | // 如果你的控件是属性, 这里可以进行相对布局
64 | CGPoint point = CGPointMake(90,144 + 86 * 3);
65 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:200 Height:30 Type:XTTypeOfDownCenter Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]];
66 | view1.dataArray = @[@"您有一位朋友找您"];
67 | view1.row_height = 30;
68 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0];
69 | [view1 popView];
70 | }
71 | break;
72 | case 4:
73 | {
74 | // 如果你的控件是属性, 这里可以进行相对布局
75 | CGPoint point = CGPointMake(90,144 + 86 * 4);
76 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:200 Height:30 Type:XTTypeOfLeftUp Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]];
77 | view1.dataArray = @[@"您有一位朋友找您"];
78 | view1.row_height = 30;
79 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0];
80 | [view1 popView];
81 | }
82 | break;
83 | case 5:
84 | {
85 | // 如果你的控件是属性, 这里可以进行相对布局
86 | CGPoint point = CGPointMake(90,144 + 86 * 5);
87 | XTPopTableView *view1 = [[XTPopTableView alloc] initWithOrigin:point Width:200 Height:30 Type:XTTypeOfDownCenter Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]];
88 | view1.dataArray = @[@"您有一位朋友找您"];
89 | view1.row_height = 30;
90 | view1.titleTextColor = [UIColor colorWithRed:0.2669 green:0.765 blue:1.0 alpha:1.0];
91 | [view1 popView];
92 | }
93 | break;
94 |
95 | default:
96 | break;
97 | }
98 | }
99 | ```
100 | 如果要实现点击方法
101 | 签订协议
102 | ```objectivec
103 | @interface ViewController ()
104 |
105 | ```
106 | 实现代理方法
107 | ```objectivec
108 | - (void)selectIndexPathRow:(NSInteger)index
109 | ```
110 |
111 | ##### 第二种
112 | ```objectivec
113 | // 如果你的控件是属性, 这里可以进行相对布局
114 | CGPoint point = CGPointMake(90 * 1,144);
115 | XTPopNormalView *view1 = [[XTPopNormalView alloc] initWithOrigin:point Width:300 Height:60 Type:XTTypeOfUpLeft Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]];
116 | [view1 popViewNormal];
117 | [view1.btnDiss setTitle:@"点击我 消失" forState:UIControlStateNormal];
118 | [self.view addSubview:view1];
119 | ```
--------------------------------------------------------------------------------
/XTPopView/XTPopView/XTPopNormalView.m:
--------------------------------------------------------------------------------
1 | //
2 | // XTPopNormalView.m
3 | // XTPopView
4 | //
5 | // Created by Mac on 16/7/27.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #import "XTPopNormalView.h"
10 |
11 | @interface XTPopNormalView ()
12 |
13 | @end
14 |
15 | @implementation XTPopNormalView
16 | - (instancetype)initWithOrigin:(CGPoint)origin Width:(CGFloat)width Height:(CGFloat)height Type:(XTDirectionType)type Color:(UIColor *)color
17 | {
18 | self = [super initWithOrigin:origin Width:width Height:30 Type:type Color:color];
19 | self.type = type;
20 | [self setUI:width];
21 | return self;
22 | }
23 | - (UIButton *)btnDiss
24 | {
25 | if (!_btnDiss) {
26 | _btnDiss = [UIButton buttonWithType:UIButtonTypeCustom];
27 | }
28 | return _btnDiss;
29 | }
30 | - (void)setUI:(CGFloat)width
31 | {
32 | [self.backGoundView addSubview:self.btnDiss];
33 | _btnDiss.frame = CGRectMake(0, 0, width, 30);
34 | [_btnDiss addTarget:self action:@selector(dissClick) forControlEvents:UIControlEventTouchUpInside];
35 | }
36 | - (void)dissClick
37 | {
38 | [UIView animateWithDuration:0.25 animations:^{
39 | //
40 | [self removeFromSuperview];
41 | }];
42 | }
43 | #pragma mark -
44 | - (void)drawRect:(CGRect)rect
45 | {
46 | [super drawRect:rect];
47 | }
48 | #pragma mark -
49 | - (void)popViewNormal
50 | {
51 | switch (self.type) {
52 | case XTTypeOfUpLeft: {
53 | {
54 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0);
55 | CGFloat origin_x = self.origin.x - Length2;
56 | CGFloat origin_y = self.origin.y + Length;
57 | CGFloat size_width = self.width;
58 | CGFloat size_height = self.height;
59 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
60 | }
61 | break;
62 | }
63 | case XTTypeOfUpCenter: {
64 | {
65 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0);
66 | CGFloat origin_x = self.origin.x - self.width / 2;
67 | CGFloat origin_y = self.origin.y + Length;
68 | CGFloat size_width = self.width;
69 | CGFloat size_height = self.height;
70 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
71 | }
72 | break;
73 | }
74 | case XTTypeOfUpRight: {
75 | {
76 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0);
77 | CGFloat origin_x = self.origin.x + Length2;
78 | CGFloat origin_y = self.origin.y + Length;
79 | CGFloat size_width = -self.width;
80 | CGFloat size_height = self.height;
81 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
82 | }
83 | break;
84 | }
85 | case XTTypeOfDownLeft: {
86 | {
87 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0);
88 | CGFloat origin_x = self.origin.x - Length2;
89 | CGFloat origin_y = self.origin.y - Length;
90 | CGFloat size_width = self.width;
91 | CGFloat size_height = -self.height;
92 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
93 | }
94 | break;
95 | }
96 | case XTTypeOfDownCenter: {
97 | {
98 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0);
99 | CGFloat origin_x = self.origin.x - self.width / 2;
100 | CGFloat origin_y = self.origin.y - Length;
101 | CGFloat size_width = self.width;
102 | CGFloat size_height = -self.height;
103 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
104 | }
105 | break;
106 | }
107 | case XTTypeOfDownRight: {
108 | {
109 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0);
110 | CGFloat origin_x = self.origin.x-self.width + Length2;
111 | CGFloat origin_y = self.origin.y - Length;
112 | CGFloat size_width = self.width;
113 | CGFloat size_height = -self.height;
114 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
115 | }
116 | break;
117 | }
118 |
119 | case XTTypeOfLeftUp: {
120 | {
121 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0);
122 | CGFloat origin_x = self.origin.x + Length;
123 | CGFloat origin_y = self.origin.y - Length2;
124 | CGFloat size_width = self.width;
125 | CGFloat size_height = self.height;
126 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
127 | }
128 | break;
129 | }
130 | case XTTypeOfLeftCenter: {
131 | {
132 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0);
133 | CGFloat origin_x = self.origin.x + Length;
134 | CGFloat origin_y = self.origin.y - self.height / 2;
135 | CGFloat size_width = self.width;
136 | CGFloat size_height = self.height;
137 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
138 | }
139 | break;
140 | }
141 | case XTTypeOfLeftDown: {
142 | {
143 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0);
144 | CGFloat origin_x = self.origin.x + Length;
145 | CGFloat origin_y = self.origin.y - self.height + Length2;
146 | CGFloat size_width = self.width;
147 | CGFloat size_height = self.height;
148 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
149 | }
150 | break;
151 | }
152 | case XTTypeOfRightUp: {
153 | {
154 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0);
155 | CGFloat origin_x = self.origin.x - Length;
156 | CGFloat origin_y = self.origin.y - Length2;
157 | CGFloat size_width = -self.width;
158 | CGFloat size_height = self.height;
159 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
160 | }
161 | break;
162 | }
163 | case XTTypeOfRightCenter: {
164 | {
165 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0);
166 | CGFloat origin_x = self.origin.x - Length;
167 | CGFloat origin_y = self.origin.y - self.height / 2;
168 | CGFloat size_width = -self.width;
169 | CGFloat size_height = self.height;
170 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
171 | }
172 | break;
173 | }
174 | case XTTypeOfRightDown: {
175 | {
176 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0);
177 | CGFloat origin_x = self.origin.x - Length;
178 | CGFloat origin_y = self.origin.y - self.height + Length2;
179 | CGFloat size_width = -self.width;
180 | CGFloat size_height = self.height;
181 | [self startAnimateNormalView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
182 | }
183 | break;
184 | }
185 | }
186 | }
187 | - (void)startAnimateNormalView_x:(CGFloat) x
188 | _y:(CGFloat) y
189 | origin_width:(CGFloat) width
190 | origin_height:(CGFloat) height
191 | {
192 | self.backGoundView.frame = CGRectMake(x, y, width, height);
193 | }
194 | #pragma mark -
195 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
196 | {
197 | NSLog(@"------------");
198 |
199 | }
200 | #pragma mark -
201 |
202 |
203 | @end
204 |
--------------------------------------------------------------------------------
/XTPopView/XTPopView/XTPopViewBase.m:
--------------------------------------------------------------------------------
1 | //
2 | // XTPopView.m
3 | // XTPopView
4 | //
5 | // Created by zjwang on 16/5/23.
6 | // Copyright © 2016年 夏天. All rights reserved.
7 | //
8 |
9 | #import "XTPopViewBase.h"
10 |
11 | @interface XTPopViewBase ()
12 |
13 | @end
14 |
15 | @implementation XTPopViewBase
16 |
17 | - (instancetype)initWithOrigin:(CGPoint)origin Width:(CGFloat)width Height:(CGFloat)height Type:(XTDirectionType)type Color:(UIColor *)color
18 | {
19 |
20 | self = [super initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];
21 | if (self) {
22 | self.backgroundColor = [UIColor clearColor];
23 | // 箭头的位置
24 | self.origin = origin;
25 | // 视图的宽度
26 | self.width = width;
27 | // 视图的高度
28 | self.height = height;
29 | // 类型
30 | self.type = type;
31 | self.backGoundView = [[UIView alloc] initWithFrame:CGRectMake(origin.x, origin.y, width, height)];
32 | self.backGoundView.backgroundColor = color;
33 | [self addSubview:self.backGoundView];
34 | }
35 | return self;
36 | }
37 | #pragma mark - drawRect
38 | - (void)drawRect:(CGRect)rect {
39 | // Drawing code
40 |
41 | CGContextRef context = UIGraphicsGetCurrentContext();
42 |
43 | switch (self.type) {
44 | case XTTypeOfUpLeft:
45 | case XTTypeOfUpCenter:
46 | case XTTypeOfUpRight:{
47 | {
48 | CGFloat startX = self.origin.x;
49 | CGFloat startY = self.origin.y;
50 | CGContextMoveToPoint(context, startX, startY);
51 | CGContextAddLineToPoint(context, startX + Length, startY + Length);
52 | CGContextAddLineToPoint(context, startX - Length, startY + Length);
53 | }
54 | break;
55 | }
56 | case XTTypeOfDownLeft:
57 | case XTTypeOfDownCenter:
58 | case XTTypeOfDownRight: {
59 | {
60 | CGFloat startX = self.origin.x;
61 | CGFloat startY = self.origin.y;
62 | CGContextMoveToPoint(context, startX, startY);
63 | CGContextAddLineToPoint(context, startX - Length, startY - Length);
64 | CGContextAddLineToPoint(context, startX + Length, startY - Length);
65 | }
66 | break;
67 | }
68 | case XTTypeOfLeftUp:
69 | case XTTypeOfLeftCenter:
70 | case XTTypeOfLeftDown: {
71 | {
72 | CGFloat startX = self.origin.x;
73 | CGFloat startY = self.origin.y;
74 | CGContextMoveToPoint(context, startX, startY);
75 | CGContextAddLineToPoint(context, startX + Length, startY - Length);
76 | CGContextAddLineToPoint(context, startX + Length, startY + Length);
77 | }
78 | break;
79 | }
80 | case XTTypeOfRightUp:
81 | case XTTypeOfRightCenter:
82 | case XTTypeOfRightDown: {
83 | {
84 | CGFloat startX = self.origin.x;
85 | CGFloat startY = self.origin.y;
86 | CGContextMoveToPoint(context, startX, startY);
87 | CGContextAddLineToPoint(context, startX - Length, startY - Length);
88 | CGContextAddLineToPoint(context, startX - Length, startY + Length);
89 | }
90 | break;
91 | }
92 | }
93 |
94 | CGContextClosePath(context);
95 | [self.backGoundView.backgroundColor setFill];
96 | [self.backgroundColor setStroke];
97 | CGContextDrawPath(context, kCGPathFillStroke);
98 | }
99 | #pragma mark - popView
100 | - (void)popView
101 | {
102 | UIWindow *windowView = [UIApplication sharedApplication].keyWindow;
103 | [windowView addSubview:self];
104 |
105 | switch (self.type) {
106 | case XTTypeOfUpLeft: {
107 | {
108 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0);
109 | CGFloat origin_x = self.origin.x - Length2;
110 | CGFloat origin_y = self.origin.y + Length;
111 | CGFloat size_width = self.width;
112 | CGFloat size_height = self.height;
113 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
114 | }
115 | break;
116 | }
117 | case XTTypeOfUpCenter: {
118 | {
119 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0);
120 | CGFloat origin_x = self.origin.x - self.width / 2;
121 | CGFloat origin_y = self.origin.y + Length;
122 | CGFloat size_width = self.width;
123 | CGFloat size_height = self.height;
124 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
125 | }
126 | break;
127 | }
128 | case XTTypeOfUpRight: {
129 | {
130 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0);
131 | CGFloat origin_x = self.origin.x + Length2;
132 | CGFloat origin_y = self.origin.y + Length;
133 | CGFloat size_width = -self.width;
134 | CGFloat size_height = self.height;
135 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
136 | }
137 | break;
138 | }
139 | case XTTypeOfDownLeft: {
140 | {
141 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0);
142 | CGFloat origin_x = self.origin.x - Length2;
143 | CGFloat origin_y = self.origin.y - Length;
144 | CGFloat size_width = self.width;
145 | CGFloat size_height = -self.height;
146 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
147 | }
148 | break;
149 | }
150 | case XTTypeOfDownCenter: {
151 | {
152 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0);
153 | CGFloat origin_x = self.origin.x - self.width / 2;
154 | CGFloat origin_y = self.origin.y - Length;
155 | CGFloat size_width = self.width;
156 | CGFloat size_height = -self.height;
157 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
158 | }
159 | break;
160 | }
161 | case XTTypeOfDownRight: {
162 | {
163 | self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0);
164 | CGFloat origin_x = self.origin.x-self.width + Length2;
165 | CGFloat origin_y = self.origin.y - Length;
166 | CGFloat size_width = self.width;
167 | CGFloat size_height = -self.height;
168 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
169 | }
170 | break;
171 | }
172 |
173 | case XTTypeOfLeftUp: {
174 | {
175 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0);
176 | CGFloat origin_x = self.origin.x + Length;
177 | CGFloat origin_y = self.origin.y - Length2;
178 | CGFloat size_width = self.width;
179 | CGFloat size_height = self.height;
180 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
181 | }
182 | break;
183 | }
184 | case XTTypeOfLeftCenter: {
185 | {
186 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0);
187 | CGFloat origin_x = self.origin.x + Length;
188 | CGFloat origin_y = self.origin.y - self.height / 2;
189 | CGFloat size_width = self.width;
190 | CGFloat size_height = self.height;
191 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
192 | }
193 | break;
194 | }
195 | case XTTypeOfLeftDown: {
196 | {
197 | self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0);
198 | CGFloat origin_x = self.origin.x + Length;
199 | CGFloat origin_y = self.origin.y - self.height + Length2;
200 | CGFloat size_width = self.width;
201 | CGFloat size_height = self.height;
202 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
203 | }
204 | break;
205 | }
206 | case XTTypeOfRightUp: {
207 | {
208 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0);
209 | CGFloat origin_x = self.origin.x - Length;
210 | CGFloat origin_y = self.origin.y - Length2;
211 | CGFloat size_width = -self.width;
212 | CGFloat size_height = self.height;
213 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
214 | }
215 | break;
216 | }
217 | case XTTypeOfRightCenter: {
218 | {
219 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0);
220 | CGFloat origin_x = self.origin.x - Length;
221 | CGFloat origin_y = self.origin.y - self.height / 2;
222 | CGFloat size_width = -self.width;
223 | CGFloat size_height = self.height;
224 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
225 | }
226 | break;
227 | }
228 | case XTTypeOfRightDown: {
229 | {
230 | self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0);
231 | CGFloat origin_x = self.origin.x - Length;
232 | CGFloat origin_y = self.origin.y - self.height + Length2;
233 | CGFloat size_width = -self.width;
234 | CGFloat size_height = self.height;
235 | [self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];
236 | }
237 | break;
238 | }
239 | }
240 | }
241 | #pragma mark -
242 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
243 | {
244 | if (![[touches anyObject].view isEqual:self.backGoundView]) {
245 | [self dismiss];
246 | }
247 |
248 | }
249 | #pragma mark -
250 | - (void)dismiss
251 | {
252 | NSArray *results = [self subviews];
253 | for (UIView *view in results) {
254 | [view removeFromSuperview];
255 | }
256 | [self removeFromSuperview];
257 | }
258 | #pragma mark -
259 | - (void)startAnimateView_x:(CGFloat) x
260 | _y:(CGFloat) y
261 | origin_width:(CGFloat) width
262 | origin_height:(CGFloat) height
263 | {
264 | self.backGoundView.frame = CGRectMake(x, y, width, height);
265 | }
266 | @end
267 |
--------------------------------------------------------------------------------
/XTPopViewSwift.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | B96D17211DDA1A4F001B66F0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96D17201DDA1A4F001B66F0 /* AppDelegate.swift */; };
11 | B96D17231DDA1A4F001B66F0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96D17221DDA1A4F001B66F0 /* ViewController.swift */; };
12 | B96D17261DDA1A4F001B66F0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B96D17241DDA1A4F001B66F0 /* Main.storyboard */; };
13 | B96D17281DDA1A4F001B66F0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B96D17271DDA1A4F001B66F0 /* Assets.xcassets */; };
14 | B96D172B1DDA1A4F001B66F0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B96D17291DDA1A4F001B66F0 /* LaunchScreen.storyboard */; };
15 | B96D17331DDA1A62001B66F0 /* XTPopViewSwift.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96D17321DDA1A62001B66F0 /* XTPopViewSwift.swift */; };
16 | /* End PBXBuildFile section */
17 |
18 | /* Begin PBXFileReference section */
19 | B96D171D1DDA1A4F001B66F0 /* XTPopViewSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XTPopViewSwift.app; sourceTree = BUILT_PRODUCTS_DIR; };
20 | B96D17201DDA1A4F001B66F0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
21 | B96D17221DDA1A4F001B66F0 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
22 | B96D17251DDA1A4F001B66F0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
23 | B96D17271DDA1A4F001B66F0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
24 | B96D172A1DDA1A4F001B66F0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
25 | B96D172C1DDA1A4F001B66F0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
26 | B96D17321DDA1A62001B66F0 /* XTPopViewSwift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XTPopViewSwift.swift; sourceTree = ""; };
27 | /* End PBXFileReference section */
28 |
29 | /* Begin PBXFrameworksBuildPhase section */
30 | B96D171A1DDA1A4F001B66F0 /* Frameworks */ = {
31 | isa = PBXFrameworksBuildPhase;
32 | buildActionMask = 2147483647;
33 | files = (
34 | );
35 | runOnlyForDeploymentPostprocessing = 0;
36 | };
37 | /* End PBXFrameworksBuildPhase section */
38 |
39 | /* Begin PBXGroup section */
40 | B96D17141DDA1A4F001B66F0 = {
41 | isa = PBXGroup;
42 | children = (
43 | B96D171F1DDA1A4F001B66F0 /* XTPopViewSwift */,
44 | B96D171E1DDA1A4F001B66F0 /* Products */,
45 | );
46 | sourceTree = "";
47 | };
48 | B96D171E1DDA1A4F001B66F0 /* Products */ = {
49 | isa = PBXGroup;
50 | children = (
51 | B96D171D1DDA1A4F001B66F0 /* XTPopViewSwift.app */,
52 | );
53 | name = Products;
54 | sourceTree = "";
55 | };
56 | B96D171F1DDA1A4F001B66F0 /* XTPopViewSwift */ = {
57 | isa = PBXGroup;
58 | children = (
59 | B96D17201DDA1A4F001B66F0 /* AppDelegate.swift */,
60 | B96D17221DDA1A4F001B66F0 /* ViewController.swift */,
61 | B96D17321DDA1A62001B66F0 /* XTPopViewSwift.swift */,
62 | B96D17241DDA1A4F001B66F0 /* Main.storyboard */,
63 | B96D17271DDA1A4F001B66F0 /* Assets.xcassets */,
64 | B96D17291DDA1A4F001B66F0 /* LaunchScreen.storyboard */,
65 | B96D172C1DDA1A4F001B66F0 /* Info.plist */,
66 | );
67 | path = XTPopViewSwift;
68 | sourceTree = "";
69 | };
70 | /* End PBXGroup section */
71 |
72 | /* Begin PBXNativeTarget section */
73 | B96D171C1DDA1A4F001B66F0 /* XTPopViewSwift */ = {
74 | isa = PBXNativeTarget;
75 | buildConfigurationList = B96D172F1DDA1A4F001B66F0 /* Build configuration list for PBXNativeTarget "XTPopViewSwift" */;
76 | buildPhases = (
77 | B96D17191DDA1A4F001B66F0 /* Sources */,
78 | B96D171A1DDA1A4F001B66F0 /* Frameworks */,
79 | B96D171B1DDA1A4F001B66F0 /* Resources */,
80 | );
81 | buildRules = (
82 | );
83 | dependencies = (
84 | );
85 | name = XTPopViewSwift;
86 | productName = XTPopViewSwift;
87 | productReference = B96D171D1DDA1A4F001B66F0 /* XTPopViewSwift.app */;
88 | productType = "com.apple.product-type.application";
89 | };
90 | /* End PBXNativeTarget section */
91 |
92 | /* Begin PBXProject section */
93 | B96D17151DDA1A4F001B66F0 /* Project object */ = {
94 | isa = PBXProject;
95 | attributes = {
96 | LastSwiftUpdateCheck = 0800;
97 | LastUpgradeCheck = 0800;
98 | ORGANIZATIONNAME = summerxx;
99 | TargetAttributes = {
100 | B96D171C1DDA1A4F001B66F0 = {
101 | CreatedOnToolsVersion = 8.0;
102 | ProvisioningStyle = Automatic;
103 | };
104 | };
105 | };
106 | buildConfigurationList = B96D17181DDA1A4F001B66F0 /* Build configuration list for PBXProject "XTPopViewSwift" */;
107 | compatibilityVersion = "Xcode 3.2";
108 | developmentRegion = English;
109 | hasScannedForEncodings = 0;
110 | knownRegions = (
111 | en,
112 | Base,
113 | );
114 | mainGroup = B96D17141DDA1A4F001B66F0;
115 | productRefGroup = B96D171E1DDA1A4F001B66F0 /* Products */;
116 | projectDirPath = "";
117 | projectRoot = "";
118 | targets = (
119 | B96D171C1DDA1A4F001B66F0 /* XTPopViewSwift */,
120 | );
121 | };
122 | /* End PBXProject section */
123 |
124 | /* Begin PBXResourcesBuildPhase section */
125 | B96D171B1DDA1A4F001B66F0 /* Resources */ = {
126 | isa = PBXResourcesBuildPhase;
127 | buildActionMask = 2147483647;
128 | files = (
129 | B96D172B1DDA1A4F001B66F0 /* LaunchScreen.storyboard in Resources */,
130 | B96D17281DDA1A4F001B66F0 /* Assets.xcassets in Resources */,
131 | B96D17261DDA1A4F001B66F0 /* Main.storyboard in Resources */,
132 | );
133 | runOnlyForDeploymentPostprocessing = 0;
134 | };
135 | /* End PBXResourcesBuildPhase section */
136 |
137 | /* Begin PBXSourcesBuildPhase section */
138 | B96D17191DDA1A4F001B66F0 /* Sources */ = {
139 | isa = PBXSourcesBuildPhase;
140 | buildActionMask = 2147483647;
141 | files = (
142 | B96D17231DDA1A4F001B66F0 /* ViewController.swift in Sources */,
143 | B96D17211DDA1A4F001B66F0 /* AppDelegate.swift in Sources */,
144 | B96D17331DDA1A62001B66F0 /* XTPopViewSwift.swift in Sources */,
145 | );
146 | runOnlyForDeploymentPostprocessing = 0;
147 | };
148 | /* End PBXSourcesBuildPhase section */
149 |
150 | /* Begin PBXVariantGroup section */
151 | B96D17241DDA1A4F001B66F0 /* Main.storyboard */ = {
152 | isa = PBXVariantGroup;
153 | children = (
154 | B96D17251DDA1A4F001B66F0 /* Base */,
155 | );
156 | name = Main.storyboard;
157 | sourceTree = "";
158 | };
159 | B96D17291DDA1A4F001B66F0 /* LaunchScreen.storyboard */ = {
160 | isa = PBXVariantGroup;
161 | children = (
162 | B96D172A1DDA1A4F001B66F0 /* Base */,
163 | );
164 | name = LaunchScreen.storyboard;
165 | sourceTree = "";
166 | };
167 | /* End PBXVariantGroup section */
168 |
169 | /* Begin XCBuildConfiguration section */
170 | B96D172D1DDA1A4F001B66F0 /* Debug */ = {
171 | isa = XCBuildConfiguration;
172 | buildSettings = {
173 | ALWAYS_SEARCH_USER_PATHS = NO;
174 | CLANG_ANALYZER_NONNULL = YES;
175 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
176 | CLANG_CXX_LIBRARY = "libc++";
177 | CLANG_ENABLE_MODULES = YES;
178 | CLANG_ENABLE_OBJC_ARC = YES;
179 | CLANG_WARN_BOOL_CONVERSION = YES;
180 | CLANG_WARN_CONSTANT_CONVERSION = YES;
181 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
182 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
183 | CLANG_WARN_EMPTY_BODY = YES;
184 | CLANG_WARN_ENUM_CONVERSION = YES;
185 | CLANG_WARN_INFINITE_RECURSION = YES;
186 | CLANG_WARN_INT_CONVERSION = YES;
187 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
188 | CLANG_WARN_SUSPICIOUS_MOVES = YES;
189 | CLANG_WARN_UNREACHABLE_CODE = YES;
190 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
191 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
192 | COPY_PHASE_STRIP = NO;
193 | DEBUG_INFORMATION_FORMAT = dwarf;
194 | ENABLE_STRICT_OBJC_MSGSEND = YES;
195 | ENABLE_TESTABILITY = YES;
196 | GCC_C_LANGUAGE_STANDARD = gnu99;
197 | GCC_DYNAMIC_NO_PIC = NO;
198 | GCC_NO_COMMON_BLOCKS = YES;
199 | GCC_OPTIMIZATION_LEVEL = 0;
200 | GCC_PREPROCESSOR_DEFINITIONS = (
201 | "DEBUG=1",
202 | "$(inherited)",
203 | );
204 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
205 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
206 | GCC_WARN_UNDECLARED_SELECTOR = YES;
207 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
208 | GCC_WARN_UNUSED_FUNCTION = YES;
209 | GCC_WARN_UNUSED_VARIABLE = YES;
210 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
211 | MTL_ENABLE_DEBUG_INFO = YES;
212 | ONLY_ACTIVE_ARCH = YES;
213 | SDKROOT = iphoneos;
214 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
215 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
216 | TARGETED_DEVICE_FAMILY = "1,2";
217 | };
218 | name = Debug;
219 | };
220 | B96D172E1DDA1A4F001B66F0 /* Release */ = {
221 | isa = XCBuildConfiguration;
222 | buildSettings = {
223 | ALWAYS_SEARCH_USER_PATHS = NO;
224 | CLANG_ANALYZER_NONNULL = YES;
225 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
226 | CLANG_CXX_LIBRARY = "libc++";
227 | CLANG_ENABLE_MODULES = YES;
228 | CLANG_ENABLE_OBJC_ARC = YES;
229 | CLANG_WARN_BOOL_CONVERSION = YES;
230 | CLANG_WARN_CONSTANT_CONVERSION = YES;
231 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
232 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
233 | CLANG_WARN_EMPTY_BODY = YES;
234 | CLANG_WARN_ENUM_CONVERSION = YES;
235 | CLANG_WARN_INFINITE_RECURSION = YES;
236 | CLANG_WARN_INT_CONVERSION = YES;
237 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
238 | CLANG_WARN_SUSPICIOUS_MOVES = YES;
239 | CLANG_WARN_UNREACHABLE_CODE = YES;
240 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
241 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
242 | COPY_PHASE_STRIP = NO;
243 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
244 | ENABLE_NS_ASSERTIONS = NO;
245 | ENABLE_STRICT_OBJC_MSGSEND = YES;
246 | GCC_C_LANGUAGE_STANDARD = gnu99;
247 | GCC_NO_COMMON_BLOCKS = YES;
248 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
249 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
250 | GCC_WARN_UNDECLARED_SELECTOR = YES;
251 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
252 | GCC_WARN_UNUSED_FUNCTION = YES;
253 | GCC_WARN_UNUSED_VARIABLE = YES;
254 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
255 | MTL_ENABLE_DEBUG_INFO = NO;
256 | SDKROOT = iphoneos;
257 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
258 | TARGETED_DEVICE_FAMILY = "1,2";
259 | VALIDATE_PRODUCT = YES;
260 | };
261 | name = Release;
262 | };
263 | B96D17301DDA1A4F001B66F0 /* Debug */ = {
264 | isa = XCBuildConfiguration;
265 | buildSettings = {
266 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
267 | INFOPLIST_FILE = XTPopViewSwift/Info.plist;
268 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
269 | PRODUCT_BUNDLE_IDENTIFIER = summerxx.com.XTPopViewSwift;
270 | PRODUCT_NAME = "$(TARGET_NAME)";
271 | SWIFT_VERSION = 3.0;
272 | };
273 | name = Debug;
274 | };
275 | B96D17311DDA1A4F001B66F0 /* Release */ = {
276 | isa = XCBuildConfiguration;
277 | buildSettings = {
278 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
279 | INFOPLIST_FILE = XTPopViewSwift/Info.plist;
280 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
281 | PRODUCT_BUNDLE_IDENTIFIER = summerxx.com.XTPopViewSwift;
282 | PRODUCT_NAME = "$(TARGET_NAME)";
283 | SWIFT_VERSION = 3.0;
284 | };
285 | name = Release;
286 | };
287 | /* End XCBuildConfiguration section */
288 |
289 | /* Begin XCConfigurationList section */
290 | B96D17181DDA1A4F001B66F0 /* Build configuration list for PBXProject "XTPopViewSwift" */ = {
291 | isa = XCConfigurationList;
292 | buildConfigurations = (
293 | B96D172D1DDA1A4F001B66F0 /* Debug */,
294 | B96D172E1DDA1A4F001B66F0 /* Release */,
295 | );
296 | defaultConfigurationIsVisible = 0;
297 | defaultConfigurationName = Release;
298 | };
299 | B96D172F1DDA1A4F001B66F0 /* Build configuration list for PBXNativeTarget "XTPopViewSwift" */ = {
300 | isa = XCConfigurationList;
301 | buildConfigurations = (
302 | B96D17301DDA1A4F001B66F0 /* Debug */,
303 | B96D17311DDA1A4F001B66F0 /* Release */,
304 | );
305 | defaultConfigurationIsVisible = 0;
306 | };
307 | /* End XCConfigurationList section */
308 | };
309 | rootObject = B96D17151DDA1A4F001B66F0 /* Project object */;
310 | }
311 |
--------------------------------------------------------------------------------
/XTPopView.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 0464E3EB1D48FD8800C637EA /* XTPopNormalView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0464E3EA1D48FD8800C637EA /* XTPopNormalView.m */; };
11 | BC32AD681D2E369700AF5278 /* XTPopTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC32AD671D2E369700AF5278 /* XTPopTableView.m */; };
12 | BC81569F1CF29569001AD81F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BC81569E1CF29569001AD81F /* main.m */; };
13 | BC8156A21CF29569001AD81F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8156A11CF29569001AD81F /* AppDelegate.m */; };
14 | BC8156A51CF29569001AD81F /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8156A41CF29569001AD81F /* ViewController.m */; };
15 | BC8156A81CF29569001AD81F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BC8156A61CF29569001AD81F /* Main.storyboard */; };
16 | BC8156AA1CF29569001AD81F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BC8156A91CF29569001AD81F /* Assets.xcassets */; };
17 | BC8156AD1CF29569001AD81F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BC8156AB1CF29569001AD81F /* LaunchScreen.storyboard */; };
18 | BC8156B81CF29569001AD81F /* XTPopViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8156B71CF29569001AD81F /* XTPopViewTests.m */; };
19 | BC8156C31CF29569001AD81F /* XTPopViewUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8156C21CF29569001AD81F /* XTPopViewUITests.m */; };
20 | BC8156E31CF2E199001AD81F /* 扫一扫.png in Resources */ = {isa = PBXBuildFile; fileRef = BC8156E21CF2E199001AD81F /* 扫一扫.png */; };
21 | BC8156E51CF2E1B8001AD81F /* 添加朋友.png in Resources */ = {isa = PBXBuildFile; fileRef = BC8156E41CF2E1B8001AD81F /* 添加朋友.png */; };
22 | BC8156E71CF2E1FD001AD81F /* 付款.png in Resources */ = {isa = PBXBuildFile; fileRef = BC8156E61CF2E1FD001AD81F /* 付款.png */; };
23 | BC8156E91CF2E258001AD81F /* 发起群聊.png in Resources */ = {isa = PBXBuildFile; fileRef = BC8156E81CF2E258001AD81F /* 发起群聊.png */; };
24 | BC8156EE1CF302DB001AD81F /* XTPopViewBase.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8156ED1CF302DB001AD81F /* XTPopViewBase.m */; };
25 | D54BF21922687B1F00DE545B /* ExportOptions.plist in Resources */ = {isa = PBXBuildFile; fileRef = D54BF21822687B1F00DE545B /* ExportOptions.plist */; };
26 | /* End PBXBuildFile section */
27 |
28 | /* Begin PBXContainerItemProxy section */
29 | BC8156B41CF29569001AD81F /* PBXContainerItemProxy */ = {
30 | isa = PBXContainerItemProxy;
31 | containerPortal = BC8156921CF29569001AD81F /* Project object */;
32 | proxyType = 1;
33 | remoteGlobalIDString = BC8156991CF29569001AD81F;
34 | remoteInfo = XTPopView;
35 | };
36 | BC8156BF1CF29569001AD81F /* PBXContainerItemProxy */ = {
37 | isa = PBXContainerItemProxy;
38 | containerPortal = BC8156921CF29569001AD81F /* Project object */;
39 | proxyType = 1;
40 | remoteGlobalIDString = BC8156991CF29569001AD81F;
41 | remoteInfo = XTPopView;
42 | };
43 | /* End PBXContainerItemProxy section */
44 |
45 | /* Begin PBXFileReference section */
46 | 0464E3E91D48FD8800C637EA /* XTPopNormalView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XTPopNormalView.h; sourceTree = ""; };
47 | 0464E3EA1D48FD8800C637EA /* XTPopNormalView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XTPopNormalView.m; sourceTree = ""; };
48 | BC32AD661D2E369700AF5278 /* XTPopTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XTPopTableView.h; sourceTree = ""; };
49 | BC32AD671D2E369700AF5278 /* XTPopTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XTPopTableView.m; sourceTree = ""; };
50 | BC32AD6C1D2E591200AF5278 /* XTPopView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XTPopView.h; sourceTree = ""; };
51 | BC81569A1CF29569001AD81F /* XTPopView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XTPopView.app; sourceTree = BUILT_PRODUCTS_DIR; };
52 | BC81569E1CF29569001AD81F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
53 | BC8156A01CF29569001AD81F /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
54 | BC8156A11CF29569001AD81F /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
55 | BC8156A31CF29569001AD81F /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; };
56 | BC8156A41CF29569001AD81F /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; };
57 | BC8156A71CF29569001AD81F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
58 | BC8156A91CF29569001AD81F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
59 | BC8156AC1CF29569001AD81F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
60 | BC8156AE1CF29569001AD81F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
61 | BC8156B31CF29569001AD81F /* XTPopViewTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XTPopViewTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
62 | BC8156B71CF29569001AD81F /* XTPopViewTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XTPopViewTests.m; sourceTree = ""; };
63 | BC8156B91CF29569001AD81F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
64 | BC8156BE1CF29569001AD81F /* XTPopViewUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XTPopViewUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
65 | BC8156C21CF29569001AD81F /* XTPopViewUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XTPopViewUITests.m; sourceTree = ""; };
66 | BC8156C41CF29569001AD81F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
67 | BC8156E21CF2E199001AD81F /* 扫一扫.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "扫一扫.png"; sourceTree = ""; };
68 | BC8156E41CF2E1B8001AD81F /* 添加朋友.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "添加朋友.png"; sourceTree = ""; };
69 | BC8156E61CF2E1FD001AD81F /* 付款.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "付款.png"; sourceTree = ""; };
70 | BC8156E81CF2E258001AD81F /* 发起群聊.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "发起群聊.png"; sourceTree = ""; };
71 | BC8156EC1CF302DB001AD81F /* XTPopViewBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XTPopViewBase.h; sourceTree = ""; };
72 | BC8156ED1CF302DB001AD81F /* XTPopViewBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XTPopViewBase.m; sourceTree = ""; };
73 | D54BF21822687B1F00DE545B /* ExportOptions.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ExportOptions.plist; sourceTree = ""; };
74 | /* End PBXFileReference section */
75 |
76 | /* Begin PBXFrameworksBuildPhase section */
77 | BC8156971CF29569001AD81F /* Frameworks */ = {
78 | isa = PBXFrameworksBuildPhase;
79 | buildActionMask = 2147483647;
80 | files = (
81 | );
82 | runOnlyForDeploymentPostprocessing = 0;
83 | };
84 | BC8156B01CF29569001AD81F /* Frameworks */ = {
85 | isa = PBXFrameworksBuildPhase;
86 | buildActionMask = 2147483647;
87 | files = (
88 | );
89 | runOnlyForDeploymentPostprocessing = 0;
90 | };
91 | BC8156BB1CF29569001AD81F /* Frameworks */ = {
92 | isa = PBXFrameworksBuildPhase;
93 | buildActionMask = 2147483647;
94 | files = (
95 | );
96 | runOnlyForDeploymentPostprocessing = 0;
97 | };
98 | /* End PBXFrameworksBuildPhase section */
99 |
100 | /* Begin PBXGroup section */
101 | BC8156911CF29569001AD81F = {
102 | isa = PBXGroup;
103 | children = (
104 | BC81569C1CF29569001AD81F /* XTPopView */,
105 | BC8156B61CF29569001AD81F /* XTPopViewTests */,
106 | BC8156C11CF29569001AD81F /* XTPopViewUITests */,
107 | BC81569B1CF29569001AD81F /* Products */,
108 | );
109 | sourceTree = "";
110 | };
111 | BC81569B1CF29569001AD81F /* Products */ = {
112 | isa = PBXGroup;
113 | children = (
114 | BC81569A1CF29569001AD81F /* XTPopView.app */,
115 | BC8156B31CF29569001AD81F /* XTPopViewTests.xctest */,
116 | BC8156BE1CF29569001AD81F /* XTPopViewUITests.xctest */,
117 | );
118 | name = Products;
119 | sourceTree = "";
120 | };
121 | BC81569C1CF29569001AD81F /* XTPopView */ = {
122 | isa = PBXGroup;
123 | children = (
124 | D54BF21822687B1F00DE545B /* ExportOptions.plist */,
125 | BC8156EB1CF302DB001AD81F /* XTPopView */,
126 | BC8156A01CF29569001AD81F /* AppDelegate.h */,
127 | BC8156A11CF29569001AD81F /* AppDelegate.m */,
128 | BC8156A31CF29569001AD81F /* ViewController.h */,
129 | BC8156A41CF29569001AD81F /* ViewController.m */,
130 | BC8156A61CF29569001AD81F /* Main.storyboard */,
131 | BC8156A91CF29569001AD81F /* Assets.xcassets */,
132 | BC8156AB1CF29569001AD81F /* LaunchScreen.storyboard */,
133 | BC8156AE1CF29569001AD81F /* Info.plist */,
134 | BC81569D1CF29569001AD81F /* Supporting Files */,
135 | );
136 | path = XTPopView;
137 | sourceTree = "";
138 | };
139 | BC81569D1CF29569001AD81F /* Supporting Files */ = {
140 | isa = PBXGroup;
141 | children = (
142 | BC8156E81CF2E258001AD81F /* 发起群聊.png */,
143 | BC8156E61CF2E1FD001AD81F /* 付款.png */,
144 | BC8156E41CF2E1B8001AD81F /* 添加朋友.png */,
145 | BC8156E21CF2E199001AD81F /* 扫一扫.png */,
146 | BC81569E1CF29569001AD81F /* main.m */,
147 | );
148 | name = "Supporting Files";
149 | sourceTree = "";
150 | };
151 | BC8156B61CF29569001AD81F /* XTPopViewTests */ = {
152 | isa = PBXGroup;
153 | children = (
154 | BC8156B71CF29569001AD81F /* XTPopViewTests.m */,
155 | BC8156B91CF29569001AD81F /* Info.plist */,
156 | );
157 | path = XTPopViewTests;
158 | sourceTree = "";
159 | };
160 | BC8156C11CF29569001AD81F /* XTPopViewUITests */ = {
161 | isa = PBXGroup;
162 | children = (
163 | BC8156C21CF29569001AD81F /* XTPopViewUITests.m */,
164 | BC8156C41CF29569001AD81F /* Info.plist */,
165 | );
166 | path = XTPopViewUITests;
167 | sourceTree = "";
168 | };
169 | BC8156EB1CF302DB001AD81F /* XTPopView */ = {
170 | isa = PBXGroup;
171 | children = (
172 | BC32AD6C1D2E591200AF5278 /* XTPopView.h */,
173 | BC8156EC1CF302DB001AD81F /* XTPopViewBase.h */,
174 | BC8156ED1CF302DB001AD81F /* XTPopViewBase.m */,
175 | BC32AD661D2E369700AF5278 /* XTPopTableView.h */,
176 | BC32AD671D2E369700AF5278 /* XTPopTableView.m */,
177 | 0464E3E91D48FD8800C637EA /* XTPopNormalView.h */,
178 | 0464E3EA1D48FD8800C637EA /* XTPopNormalView.m */,
179 | );
180 | path = XTPopView;
181 | sourceTree = "";
182 | };
183 | /* End PBXGroup section */
184 |
185 | /* Begin PBXNativeTarget section */
186 | BC8156991CF29569001AD81F /* XTPopView */ = {
187 | isa = PBXNativeTarget;
188 | buildConfigurationList = BC8156C71CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopView" */;
189 | buildPhases = (
190 | BC8156961CF29569001AD81F /* Sources */,
191 | BC8156971CF29569001AD81F /* Frameworks */,
192 | BC8156981CF29569001AD81F /* Resources */,
193 | );
194 | buildRules = (
195 | );
196 | dependencies = (
197 | );
198 | name = XTPopView;
199 | productName = XTPopView;
200 | productReference = BC81569A1CF29569001AD81F /* XTPopView.app */;
201 | productType = "com.apple.product-type.application";
202 | };
203 | BC8156B21CF29569001AD81F /* XTPopViewTests */ = {
204 | isa = PBXNativeTarget;
205 | buildConfigurationList = BC8156CA1CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopViewTests" */;
206 | buildPhases = (
207 | BC8156AF1CF29569001AD81F /* Sources */,
208 | BC8156B01CF29569001AD81F /* Frameworks */,
209 | BC8156B11CF29569001AD81F /* Resources */,
210 | );
211 | buildRules = (
212 | );
213 | dependencies = (
214 | BC8156B51CF29569001AD81F /* PBXTargetDependency */,
215 | );
216 | name = XTPopViewTests;
217 | productName = XTPopViewTests;
218 | productReference = BC8156B31CF29569001AD81F /* XTPopViewTests.xctest */;
219 | productType = "com.apple.product-type.bundle.unit-test";
220 | };
221 | BC8156BD1CF29569001AD81F /* XTPopViewUITests */ = {
222 | isa = PBXNativeTarget;
223 | buildConfigurationList = BC8156CD1CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopViewUITests" */;
224 | buildPhases = (
225 | BC8156BA1CF29569001AD81F /* Sources */,
226 | BC8156BB1CF29569001AD81F /* Frameworks */,
227 | BC8156BC1CF29569001AD81F /* Resources */,
228 | );
229 | buildRules = (
230 | );
231 | dependencies = (
232 | BC8156C01CF29569001AD81F /* PBXTargetDependency */,
233 | );
234 | name = XTPopViewUITests;
235 | productName = XTPopViewUITests;
236 | productReference = BC8156BE1CF29569001AD81F /* XTPopViewUITests.xctest */;
237 | productType = "com.apple.product-type.bundle.ui-testing";
238 | };
239 | /* End PBXNativeTarget section */
240 |
241 | /* Begin PBXProject section */
242 | BC8156921CF29569001AD81F /* Project object */ = {
243 | isa = PBXProject;
244 | attributes = {
245 | LastUpgradeCheck = 0730;
246 | ORGANIZATIONNAME = "夏天";
247 | TargetAttributes = {
248 | BC8156991CF29569001AD81F = {
249 | CreatedOnToolsVersion = 7.3;
250 | };
251 | BC8156B21CF29569001AD81F = {
252 | CreatedOnToolsVersion = 7.3;
253 | TestTargetID = BC8156991CF29569001AD81F;
254 | };
255 | BC8156BD1CF29569001AD81F = {
256 | CreatedOnToolsVersion = 7.3;
257 | TestTargetID = BC8156991CF29569001AD81F;
258 | };
259 | };
260 | };
261 | buildConfigurationList = BC8156951CF29569001AD81F /* Build configuration list for PBXProject "XTPopView" */;
262 | compatibilityVersion = "Xcode 3.2";
263 | developmentRegion = English;
264 | hasScannedForEncodings = 0;
265 | knownRegions = (
266 | en,
267 | Base,
268 | );
269 | mainGroup = BC8156911CF29569001AD81F;
270 | productRefGroup = BC81569B1CF29569001AD81F /* Products */;
271 | projectDirPath = "";
272 | projectRoot = "";
273 | targets = (
274 | BC8156991CF29569001AD81F /* XTPopView */,
275 | BC8156B21CF29569001AD81F /* XTPopViewTests */,
276 | BC8156BD1CF29569001AD81F /* XTPopViewUITests */,
277 | );
278 | };
279 | /* End PBXProject section */
280 |
281 | /* Begin PBXResourcesBuildPhase section */
282 | BC8156981CF29569001AD81F /* Resources */ = {
283 | isa = PBXResourcesBuildPhase;
284 | buildActionMask = 2147483647;
285 | files = (
286 | BC8156AD1CF29569001AD81F /* LaunchScreen.storyboard in Resources */,
287 | BC8156E71CF2E1FD001AD81F /* 付款.png in Resources */,
288 | BC8156E51CF2E1B8001AD81F /* 添加朋友.png in Resources */,
289 | D54BF21922687B1F00DE545B /* ExportOptions.plist in Resources */,
290 | BC8156E31CF2E199001AD81F /* 扫一扫.png in Resources */,
291 | BC8156E91CF2E258001AD81F /* 发起群聊.png in Resources */,
292 | BC8156AA1CF29569001AD81F /* Assets.xcassets in Resources */,
293 | BC8156A81CF29569001AD81F /* Main.storyboard in Resources */,
294 | );
295 | runOnlyForDeploymentPostprocessing = 0;
296 | };
297 | BC8156B11CF29569001AD81F /* Resources */ = {
298 | isa = PBXResourcesBuildPhase;
299 | buildActionMask = 2147483647;
300 | files = (
301 | );
302 | runOnlyForDeploymentPostprocessing = 0;
303 | };
304 | BC8156BC1CF29569001AD81F /* Resources */ = {
305 | isa = PBXResourcesBuildPhase;
306 | buildActionMask = 2147483647;
307 | files = (
308 | );
309 | runOnlyForDeploymentPostprocessing = 0;
310 | };
311 | /* End PBXResourcesBuildPhase section */
312 |
313 | /* Begin PBXSourcesBuildPhase section */
314 | BC8156961CF29569001AD81F /* Sources */ = {
315 | isa = PBXSourcesBuildPhase;
316 | buildActionMask = 2147483647;
317 | files = (
318 | BC8156EE1CF302DB001AD81F /* XTPopViewBase.m in Sources */,
319 | BC32AD681D2E369700AF5278 /* XTPopTableView.m in Sources */,
320 | BC8156A51CF29569001AD81F /* ViewController.m in Sources */,
321 | 0464E3EB1D48FD8800C637EA /* XTPopNormalView.m in Sources */,
322 | BC8156A21CF29569001AD81F /* AppDelegate.m in Sources */,
323 | BC81569F1CF29569001AD81F /* main.m in Sources */,
324 | );
325 | runOnlyForDeploymentPostprocessing = 0;
326 | };
327 | BC8156AF1CF29569001AD81F /* Sources */ = {
328 | isa = PBXSourcesBuildPhase;
329 | buildActionMask = 2147483647;
330 | files = (
331 | BC8156B81CF29569001AD81F /* XTPopViewTests.m in Sources */,
332 | );
333 | runOnlyForDeploymentPostprocessing = 0;
334 | };
335 | BC8156BA1CF29569001AD81F /* Sources */ = {
336 | isa = PBXSourcesBuildPhase;
337 | buildActionMask = 2147483647;
338 | files = (
339 | BC8156C31CF29569001AD81F /* XTPopViewUITests.m in Sources */,
340 | );
341 | runOnlyForDeploymentPostprocessing = 0;
342 | };
343 | /* End PBXSourcesBuildPhase section */
344 |
345 | /* Begin PBXTargetDependency section */
346 | BC8156B51CF29569001AD81F /* PBXTargetDependency */ = {
347 | isa = PBXTargetDependency;
348 | target = BC8156991CF29569001AD81F /* XTPopView */;
349 | targetProxy = BC8156B41CF29569001AD81F /* PBXContainerItemProxy */;
350 | };
351 | BC8156C01CF29569001AD81F /* PBXTargetDependency */ = {
352 | isa = PBXTargetDependency;
353 | target = BC8156991CF29569001AD81F /* XTPopView */;
354 | targetProxy = BC8156BF1CF29569001AD81F /* PBXContainerItemProxy */;
355 | };
356 | /* End PBXTargetDependency section */
357 |
358 | /* Begin PBXVariantGroup section */
359 | BC8156A61CF29569001AD81F /* Main.storyboard */ = {
360 | isa = PBXVariantGroup;
361 | children = (
362 | BC8156A71CF29569001AD81F /* Base */,
363 | );
364 | name = Main.storyboard;
365 | sourceTree = "";
366 | };
367 | BC8156AB1CF29569001AD81F /* LaunchScreen.storyboard */ = {
368 | isa = PBXVariantGroup;
369 | children = (
370 | BC8156AC1CF29569001AD81F /* Base */,
371 | );
372 | name = LaunchScreen.storyboard;
373 | sourceTree = "";
374 | };
375 | /* End PBXVariantGroup section */
376 |
377 | /* Begin XCBuildConfiguration section */
378 | BC8156C51CF29569001AD81F /* Debug */ = {
379 | isa = XCBuildConfiguration;
380 | buildSettings = {
381 | ALWAYS_SEARCH_USER_PATHS = NO;
382 | CLANG_ANALYZER_NONNULL = YES;
383 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
384 | CLANG_CXX_LIBRARY = "libc++";
385 | CLANG_ENABLE_MODULES = YES;
386 | CLANG_ENABLE_OBJC_ARC = YES;
387 | CLANG_WARN_BOOL_CONVERSION = YES;
388 | CLANG_WARN_CONSTANT_CONVERSION = YES;
389 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
390 | CLANG_WARN_EMPTY_BODY = YES;
391 | CLANG_WARN_ENUM_CONVERSION = YES;
392 | CLANG_WARN_INT_CONVERSION = YES;
393 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
394 | CLANG_WARN_UNREACHABLE_CODE = YES;
395 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
396 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
397 | COPY_PHASE_STRIP = NO;
398 | DEBUG_INFORMATION_FORMAT = dwarf;
399 | ENABLE_STRICT_OBJC_MSGSEND = YES;
400 | ENABLE_TESTABILITY = YES;
401 | GCC_C_LANGUAGE_STANDARD = gnu99;
402 | GCC_DYNAMIC_NO_PIC = NO;
403 | GCC_NO_COMMON_BLOCKS = YES;
404 | GCC_OPTIMIZATION_LEVEL = 0;
405 | GCC_PREPROCESSOR_DEFINITIONS = (
406 | "DEBUG=1",
407 | "$(inherited)",
408 | );
409 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
410 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
411 | GCC_WARN_UNDECLARED_SELECTOR = YES;
412 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
413 | GCC_WARN_UNUSED_FUNCTION = YES;
414 | GCC_WARN_UNUSED_VARIABLE = YES;
415 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
416 | MTL_ENABLE_DEBUG_INFO = YES;
417 | ONLY_ACTIVE_ARCH = YES;
418 | SDKROOT = iphoneos;
419 | TARGETED_DEVICE_FAMILY = "1,2";
420 | };
421 | name = Debug;
422 | };
423 | BC8156C61CF29569001AD81F /* Release */ = {
424 | isa = XCBuildConfiguration;
425 | buildSettings = {
426 | ALWAYS_SEARCH_USER_PATHS = NO;
427 | CLANG_ANALYZER_NONNULL = YES;
428 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
429 | CLANG_CXX_LIBRARY = "libc++";
430 | CLANG_ENABLE_MODULES = YES;
431 | CLANG_ENABLE_OBJC_ARC = YES;
432 | CLANG_WARN_BOOL_CONVERSION = YES;
433 | CLANG_WARN_CONSTANT_CONVERSION = YES;
434 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
435 | CLANG_WARN_EMPTY_BODY = YES;
436 | CLANG_WARN_ENUM_CONVERSION = YES;
437 | CLANG_WARN_INT_CONVERSION = YES;
438 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
439 | CLANG_WARN_UNREACHABLE_CODE = YES;
440 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
441 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
442 | COPY_PHASE_STRIP = NO;
443 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
444 | ENABLE_NS_ASSERTIONS = NO;
445 | ENABLE_STRICT_OBJC_MSGSEND = YES;
446 | GCC_C_LANGUAGE_STANDARD = gnu99;
447 | GCC_NO_COMMON_BLOCKS = YES;
448 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
449 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
450 | GCC_WARN_UNDECLARED_SELECTOR = YES;
451 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
452 | GCC_WARN_UNUSED_FUNCTION = YES;
453 | GCC_WARN_UNUSED_VARIABLE = YES;
454 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
455 | MTL_ENABLE_DEBUG_INFO = NO;
456 | SDKROOT = iphoneos;
457 | TARGETED_DEVICE_FAMILY = "1,2";
458 | VALIDATE_PRODUCT = YES;
459 | };
460 | name = Release;
461 | };
462 | BC8156C81CF29569001AD81F /* Debug */ = {
463 | isa = XCBuildConfiguration;
464 | buildSettings = {
465 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
466 | INFOPLIST_FILE = XTPopView/Info.plist;
467 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
468 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
469 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopView";
470 | PRODUCT_NAME = "$(TARGET_NAME)";
471 | };
472 | name = Debug;
473 | };
474 | BC8156C91CF29569001AD81F /* Release */ = {
475 | isa = XCBuildConfiguration;
476 | buildSettings = {
477 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
478 | INFOPLIST_FILE = XTPopView/Info.plist;
479 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
480 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
481 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopView";
482 | PRODUCT_NAME = "$(TARGET_NAME)";
483 | };
484 | name = Release;
485 | };
486 | BC8156CB1CF29569001AD81F /* Debug */ = {
487 | isa = XCBuildConfiguration;
488 | buildSettings = {
489 | BUNDLE_LOADER = "$(TEST_HOST)";
490 | INFOPLIST_FILE = XTPopViewTests/Info.plist;
491 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
492 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopViewTests";
493 | PRODUCT_NAME = "$(TARGET_NAME)";
494 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XTPopView.app/XTPopView";
495 | };
496 | name = Debug;
497 | };
498 | BC8156CC1CF29569001AD81F /* Release */ = {
499 | isa = XCBuildConfiguration;
500 | buildSettings = {
501 | BUNDLE_LOADER = "$(TEST_HOST)";
502 | INFOPLIST_FILE = XTPopViewTests/Info.plist;
503 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
504 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopViewTests";
505 | PRODUCT_NAME = "$(TARGET_NAME)";
506 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XTPopView.app/XTPopView";
507 | };
508 | name = Release;
509 | };
510 | BC8156CE1CF29569001AD81F /* Debug */ = {
511 | isa = XCBuildConfiguration;
512 | buildSettings = {
513 | INFOPLIST_FILE = XTPopViewUITests/Info.plist;
514 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
515 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopViewUITests";
516 | PRODUCT_NAME = "$(TARGET_NAME)";
517 | TEST_TARGET_NAME = XTPopView;
518 | };
519 | name = Debug;
520 | };
521 | BC8156CF1CF29569001AD81F /* Release */ = {
522 | isa = XCBuildConfiguration;
523 | buildSettings = {
524 | INFOPLIST_FILE = XTPopViewUITests/Info.plist;
525 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
526 | PRODUCT_BUNDLE_IDENTIFIER = "-MyCompanyName-.XTPopViewUITests";
527 | PRODUCT_NAME = "$(TARGET_NAME)";
528 | TEST_TARGET_NAME = XTPopView;
529 | };
530 | name = Release;
531 | };
532 | /* End XCBuildConfiguration section */
533 |
534 | /* Begin XCConfigurationList section */
535 | BC8156951CF29569001AD81F /* Build configuration list for PBXProject "XTPopView" */ = {
536 | isa = XCConfigurationList;
537 | buildConfigurations = (
538 | BC8156C51CF29569001AD81F /* Debug */,
539 | BC8156C61CF29569001AD81F /* Release */,
540 | );
541 | defaultConfigurationIsVisible = 0;
542 | defaultConfigurationName = Release;
543 | };
544 | BC8156C71CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopView" */ = {
545 | isa = XCConfigurationList;
546 | buildConfigurations = (
547 | BC8156C81CF29569001AD81F /* Debug */,
548 | BC8156C91CF29569001AD81F /* Release */,
549 | );
550 | defaultConfigurationIsVisible = 0;
551 | defaultConfigurationName = Release;
552 | };
553 | BC8156CA1CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopViewTests" */ = {
554 | isa = XCConfigurationList;
555 | buildConfigurations = (
556 | BC8156CB1CF29569001AD81F /* Debug */,
557 | BC8156CC1CF29569001AD81F /* Release */,
558 | );
559 | defaultConfigurationIsVisible = 0;
560 | defaultConfigurationName = Release;
561 | };
562 | BC8156CD1CF29569001AD81F /* Build configuration list for PBXNativeTarget "XTPopViewUITests" */ = {
563 | isa = XCConfigurationList;
564 | buildConfigurations = (
565 | BC8156CE1CF29569001AD81F /* Debug */,
566 | BC8156CF1CF29569001AD81F /* Release */,
567 | );
568 | defaultConfigurationIsVisible = 0;
569 | defaultConfigurationName = Release;
570 | };
571 | /* End XCConfigurationList section */
572 | };
573 | rootObject = BC8156921CF29569001AD81F /* Project object */;
574 | }
575 |
--------------------------------------------------------------------------------