|
@@ -17,6 +17,10 @@
|
|
|
* for another approach see https://github.com/bizz84/MVScrollViewAutoLayout
|
|
|
*/
|
|
|
|
|
|
+@interface MASExampleScrollView ()
|
|
|
+@property (strong, nonatomic) UIScrollView* scrollView;
|
|
|
+@end
|
|
|
+
|
|
|
@implementation MASExampleScrollView
|
|
|
|
|
|
- (id)init {
|
|
@@ -24,39 +28,50 @@
|
|
|
if (!self) return nil;
|
|
|
|
|
|
UIScrollView *scrollView = UIScrollView.new;
|
|
|
+ self.scrollView = scrollView;
|
|
|
scrollView.backgroundColor = [UIColor grayColor];
|
|
|
[self addSubview:scrollView];
|
|
|
-
|
|
|
- [scrollView makeConstraints:^(MASConstraintMaker *make) {
|
|
|
+ [self.scrollView makeConstraints:^(MASConstraintMaker *make) {
|
|
|
make.edges.equalTo(self);
|
|
|
}];
|
|
|
-
|
|
|
+
|
|
|
+ // We create a dummy contentView that will hold everything (necessary to use scrollRectToVisible later)
|
|
|
+ UIView* contentView = UIView.new;
|
|
|
+ [self.scrollView addSubview:contentView];
|
|
|
+ [contentView makeConstraints:^(MASConstraintMaker *make) {
|
|
|
+ make.edges.equalTo(self.scrollView);
|
|
|
+ make.width.equalTo(self.scrollView.width);
|
|
|
+ }];
|
|
|
+
|
|
|
UIView *lastView;
|
|
|
- CGFloat height = 20;
|
|
|
+ CGFloat height = 25;
|
|
|
|
|
|
for (int i = 0; i < 10; i++) {
|
|
|
UIView *view = UIView.new;
|
|
|
view.backgroundColor = [self randomColor];
|
|
|
- [scrollView addSubview:view];
|
|
|
+ [contentView addSubview:view];
|
|
|
|
|
|
+ // Tap
|
|
|
+ UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
|
|
|
+ [view addGestureRecognizer:singleTap];
|
|
|
+
|
|
|
[view mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
|
make.top.equalTo(lastView ? lastView.bottom : @0);
|
|
|
make.left.equalTo(@0);
|
|
|
- make.width.equalTo(scrollView.width);
|
|
|
+ make.width.equalTo(contentView.width);
|
|
|
make.height.equalTo(@(height));
|
|
|
}];
|
|
|
|
|
|
- height += 20;
|
|
|
+ height += 25;
|
|
|
lastView = view;
|
|
|
}
|
|
|
|
|
|
- // dummy view, which determines the contentSize of scroll view
|
|
|
+ // dummy view, which determines the size of the contentView size and therefore the scrollView contentSize
|
|
|
UIView *sizingView = UIView.new;
|
|
|
[scrollView addSubview:sizingView];
|
|
|
-
|
|
|
[sizingView makeConstraints:^(MASConstraintMaker *make) {
|
|
|
make.top.equalTo(lastView.bottom);
|
|
|
- make.bottom.equalTo(scrollView.bottom);
|
|
|
+ make.bottom.equalTo(contentView.bottom);
|
|
|
}];
|
|
|
|
|
|
return self;
|
|
@@ -69,4 +84,9 @@
|
|
|
return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
|
|
|
}
|
|
|
|
|
|
+- (void)singleTap:(UITapGestureRecognizer*)sender {
|
|
|
+ [sender.view setAlpha:sender.view.alpha / 1.20]; // To see something happen on screen when you tap :O
|
|
|
+ [self.scrollView scrollRectToVisible:sender.view.frame animated:YES];
|
|
|
+};
|
|
|
+
|
|
|
@end
|