/
MCPagerView.m
119 lines (98 loc) · 3.11 KB
/
MCPagerView.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
//
// MCPagerView.m
// MCPagerView
//
// Created by Baglan on 7/20/12.
// Copyright (c) 2012 MobileCreators. All rights reserved.
//
#import "MCPagerView.h"
@implementation MCPagerView {
NSMutableDictionary *_images;
NSMutableArray *_pageViews;
}
@synthesize page = _page;
@synthesize pattern = _pattern;
@synthesize delegate = _delegate;
- (void)commonInit
{
_page = 0;
_pattern = @"";
_images = [NSMutableDictionary dictionary];
_pageViews = [NSMutableArray array];
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self commonInit];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self commonInit];
}
return self;
}
- (void)setPage:(NSInteger)page
{
// Skip if delegate said "do not update"
if ([_delegate respondsToSelector:@selector(pageView:shouldUpdateToPage:)] && ![_delegate pageView:self shouldUpdateToPage:page]) {
return;
}
_page = page;
[self setNeedsLayout];
// Inform delegate of the update
if ([_delegate respondsToSelector:@selector(pageView:didUpdateToPage:)]) {
[_delegate pageView:self didUpdateToPage:page];
}
// Send update notification
[[NSNotificationCenter defaultCenter] postNotificationName:MCPAGERVIEW_DID_UPDATE_NOTIFICATION object:self];
}
- (NSInteger)numberOfPages
{
return _pattern.length;
}
- (void)tapped:(UITapGestureRecognizer *)recognizer
{
self.page = [_pageViews indexOfObject:recognizer.view];
}
- (UIImageView *)imageViewForKey:(NSString *)key
{
NSDictionary *imageData = [_images objectForKey:key];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[imageData objectForKey:@"normal"] highlightedImage:[imageData objectForKey:@"highlighted"]];
imageView.userInteractionEnabled = YES;
UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[imageView addGestureRecognizer:tgr];
return imageView;
}
- (void)layoutSubviews
{
[_pageViews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
UIView *view = obj;
[view removeFromSuperview];
}];
[_pageViews removeAllObjects];
NSInteger pages = self.numberOfPages;
CGFloat xOffset = 0;
for (int i=0; i<pages; i++) {
NSString *key = [_pattern substringWithRange:NSMakeRange(i, 1)];
UIImageView *imageView = [self imageViewForKey:key];
CGRect frame = imageView.frame;
frame.origin.x = xOffset;
imageView.frame = frame;
imageView.highlighted = (i == self.page);
[self addSubview:imageView];
[_pageViews addObject:imageView];
xOffset = xOffset + frame.size.width;
}
}
- (void)setImage:(UIImage *)image highlightedImage:(UIImage *)highlightedImage forKey:(NSString *)key
{
NSDictionary *imageData = [NSDictionary dictionaryWithObjectsAndKeys:image, @"normal", highlightedImage, @"highlighted", nil];
[_images setObject:imageData forKey:key];
[self setNeedsLayout];
}
@end