/
WMHomeViewController.m
137 lines (110 loc) · 4.62 KB
/
WMHomeViewController.m
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//
// WMHomeViewController.m
// Demo
//
// Created by Mark on 16/7/25.
// Copyright © 2016年 Wecan Studio. All rights reserved.
//
#import "WMHomeViewController.h"
#import "WMTableViewController.h"
#import "WMPanGestureRecognizer.h"
static CGFloat const kWMMenuViewHeight = 44.0;
@interface WMHomeViewController () <UIGestureRecognizerDelegate>
@property (nonatomic, strong) NSArray *musicCategories;
@property (nonatomic, strong) WMPanGestureRecognizer *panGesture;
@property (nonatomic, assign) CGPoint lastPoint;
@property (nonatomic, strong) UIView *redView;
@end
@implementation WMHomeViewController
- (NSArray *)musicCategories {
if (!_musicCategories) {
_musicCategories = @[@"单曲", @"详情", @"歌词"];
}
return _musicCategories;
}
- (instancetype)init {
if (self = [super init]) {
self.titleSizeNormal = 15;
self.titleSizeSelected = 15;
self.menuViewStyle = WMMenuViewStyleLine;
self.menuItemWidth = [UIScreen mainScreen].bounds.size.width / self.musicCategories.count;
self.viewTop = kNavigationBarHeight + kWMHeaderViewHeight;
self.titleColorSelected = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];
self.titleColorNormal = [UIColor colorWithRed:0.4 green:0.8 blue:0.1 alpha:1.0];
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title = @"专辑";
UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(0, kNavigationBarHeight, [UIScreen mainScreen].bounds.size.width, kWMHeaderViewHeight)];
redView.backgroundColor = [UIColor redColor];
self.redView = redView;
[self.view addSubview:self.redView];
self.panGesture = [[WMPanGestureRecognizer alloc] initWithTarget:self action:@selector(panOnView:)];
[self.view addGestureRecognizer:self.panGesture];
}
- (void)btnClicked:(id)sender {
NSLog(@"touch up inside");
}
- (void)panOnView:(WMPanGestureRecognizer *)recognizer {
NSLog(@"pannnnnning received..");
CGPoint currentPoint = [recognizer locationInView:self.view];
if (recognizer.state == UIGestureRecognizerStateBegan) {
self.lastPoint = currentPoint;
} else if (recognizer.state == UIGestureRecognizerStateEnded) {
CGPoint velocity = [recognizer velocityInView:self.view];
CGFloat targetPoint = velocity.y < 0 ? kNavigationBarHeight : kNavigationBarHeight + kWMHeaderViewHeight;
NSTimeInterval duration = fabs((targetPoint - self.viewTop) / velocity.y);
if (fabs(velocity.y) * 1.0 > fabs(targetPoint - self.viewTop)) {
NSLog(@"velocity: %lf", velocity.y);
[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.viewTop = targetPoint;
} completion:nil];
return;
}
}
CGFloat yChange = currentPoint.y - self.lastPoint.y;
self.viewTop += yChange;
self.lastPoint = currentPoint;
}
// MARK: ChangeViewFrame (Animatable)
- (void)setViewTop:(CGFloat)viewTop {
_viewTop = viewTop;
if (_viewTop <= kNavigationBarHeight) {
_viewTop = kNavigationBarHeight;
}
if (_viewTop > kWMHeaderViewHeight + kNavigationBarHeight) {
_viewTop = kWMHeaderViewHeight + kNavigationBarHeight;
}
self.redView.frame = ({
CGRect oriFrame = self.redView.frame;
oriFrame.origin.y = _viewTop - kWMHeaderViewHeight;
oriFrame;
});
[self forceLayoutSubviews];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Datasource & Delegate
- (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController {
return self.musicCategories.count;
}
- (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
WMTableViewController *vc = [[WMTableViewController alloc] init];
return vc;
}
- (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index {
return self.musicCategories[index];
}
- (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView {
return CGRectMake(0, _viewTop, self.view.frame.size.width, kWMMenuViewHeight);
}
- (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView {
CGFloat originY = _viewTop + kWMMenuViewHeight;
return CGRectMake(0, originY, self.view.frame.size.width, self.view.frame.size.height - originY);
}
@end