Loading...
Searching...
No Matches
NCZoomControls.m
Go to the documentation of this file.
1//
2// NCZoomControls.m
3// Zoom controls widget for navigation view
4//
5
6#import "NCZoomControls.h"
8#import "NCWidgetStyles.h"
9
10@interface NCZoomControls ()
11@property (nonatomic, copy) NCZoomInCallback onZoomIn;
12@property (nonatomic, copy) NCZoomOutCallback onZoomOut;
13@property (nonatomic, strong, nullable) NCZoomControlsConfig *config;
14@property (nonatomic, strong) UIStackView *stackView;
15@end
16
17@implementation NCZoomControls
18
19- (instancetype)initWithOnZoomIn:(NCZoomInCallback)onZoomIn onZoomOut:(NCZoomOutCallback)onZoomOut {
20 return [self initWithOnZoomIn:onZoomIn onZoomOut:onZoomOut config:nil];
21}
22
23- (instancetype)initWithOnZoomIn:(NCZoomInCallback)onZoomIn
24 onZoomOut:(NCZoomOutCallback)onZoomOut
25 config:(NCZoomControlsConfig *)config {
26 self = [super init];
27 if (self) {
28 _onZoomIn = [onZoomIn copy];
29 _onZoomOut = [onZoomOut copy];
30 _config = config;
31 [self setupUI];
32 }
33 return self;
34}
35
36- (void)setupUI {
38 CGFloat width = c.buttonWidth > 0 ? c.buttonWidth : kNCStandardButtonWidth;
41 UIColor *tintColor = c.textColor ?: kNCBaseBlackColor();
42
43 UIButton *zoomOutButton = [UIButton buttonWithType:UIButtonTypeSystem];
44 UIButton *zoomInButton = [UIButton buttonWithType:UIButtonTypeSystem];
45
46 if (c.zoomInIcon) {
47 [zoomInButton setImage:[c.zoomInIcon imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
48 zoomInButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
49 } else {
50 [zoomInButton setTitle:@"+" forState:UIControlStateNormal];
51 }
52 if (c.zoomOutIcon) {
53 [zoomOutButton setImage:[c.zoomOutIcon imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
54 zoomOutButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
55 } else {
56 [zoomOutButton setTitle:@"−" forState:UIControlStateNormal];
57 }
58
59 zoomOutButton.backgroundColor = bgColor;
60 zoomInButton.backgroundColor = bgColor;
61 zoomOutButton.tintColor = tintColor;
62 zoomInButton.tintColor = tintColor;
63
64 zoomOutButton.layer.cornerRadius = kNCBorderRadius;
65 zoomOutButton.layer.maskedCorners = kCALayerMinXMaxYCorner | kCALayerMaxXMaxYCorner;
66 zoomInButton.layer.cornerRadius = kNCBorderRadius;
67 zoomInButton.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner;
68
69 zoomOutButton.titleLabel.font = [UIFont systemFontOfSize:kNCButtonFontSize];
70 zoomInButton.titleLabel.font = [UIFont systemFontOfSize:kNCButtonFontSize];
71
72 [zoomOutButton addTarget:self action:@selector(zoomOutPressed:) forControlEvents:UIControlEventTouchUpInside];
73 [zoomInButton addTarget:self action:@selector(zoomInPressed:) forControlEvents:UIControlEventTouchUpInside];
74
75 UIStackView *stack = [[UIStackView alloc] initWithArrangedSubviews:@[zoomInButton, zoomOutButton]];
76 stack.axis = UILayoutConstraintAxisVertical;
77 stack.distribution = UIStackViewDistributionFillEqually;
78 stack.spacing = 0;
79 stack.translatesAutoresizingMaskIntoConstraints = NO;
80 stack.layer.shadowOpacity = kNCShadowOpacity;
81 stack.layer.shadowRadius = kNCShadowRadius;
82 stack.layer.shadowOffset = kNCShadowOffset;
83 stack.layer.shadowColor = kNCShadowColor().CGColor;
84 _stackView = stack;
85
86 [self addSubview:stack];
87
88 self.translatesAutoresizingMaskIntoConstraints = NO;
89
90 [NSLayoutConstraint activateConstraints:@[
91 [stack.leadingAnchor constraintEqualToAnchor:self.leadingAnchor],
92 [stack.trailingAnchor constraintEqualToAnchor:self.trailingAnchor],
93 [stack.topAnchor constraintEqualToAnchor:self.topAnchor],
94 [stack.bottomAnchor constraintEqualToAnchor:self.bottomAnchor],
95 [stack.widthAnchor constraintEqualToConstant:width],
96 [stack.heightAnchor constraintEqualToConstant:height]
97 ]];
98}
99
100- (void)applyConfig:(NCZoomControlsConfig *)config {
101 _config = config;
102 if (!_stackView || _stackView.arrangedSubviews.count < 2) return;
103 UIButton *zoomInButton = (UIButton *)_stackView.arrangedSubviews[0];
104 UIButton *zoomOutButton = (UIButton *)_stackView.arrangedSubviews[1];
105
108 UIColor *tintColor = c.textColor ?: kNCBaseBlackColor();
109
110 if (c.zoomInIcon) {
111 [zoomInButton setImage:[c.zoomInIcon imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
112 [zoomInButton setTitle:nil forState:UIControlStateNormal];
113 } else {
114 [zoomInButton setImage:nil forState:UIControlStateNormal];
115 [zoomInButton setTitle:@"+" forState:UIControlStateNormal];
116 }
117 if (c.zoomOutIcon) {
118 [zoomOutButton setImage:[c.zoomOutIcon imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
119 [zoomOutButton setTitle:nil forState:UIControlStateNormal];
120 } else {
121 [zoomOutButton setImage:nil forState:UIControlStateNormal];
122 [zoomOutButton setTitle:@"−" forState:UIControlStateNormal];
123 }
124
125 zoomInButton.backgroundColor = bgColor;
126 zoomOutButton.backgroundColor = bgColor;
127 zoomInButton.tintColor = tintColor;
128 zoomOutButton.tintColor = tintColor;
129}
130
131- (void)zoomOutPressed:(UIButton *)sender {
132 if (self.onZoomOut) {
133 self.onZoomOut();
134 }
135}
136
137- (void)zoomInPressed:(UIButton *)sender {
138 if (self.onZoomIn) {
139 self.onZoomIn();
140 }
141}
142
143@end
144