子控件的尺寸 不能通过UIScrollView
来计算,可以考虑通过以下方式计算
固定值
(width==100,height==300) UIScrollView以外的其他控件
来计算尺寸 frame
应该通过 子控件以外的其他控件
来计算 UIScrollView的 contentSize
通过子控件来计算
子控件的尺寸
以及 子控件与UIScrollView之间的间距
分析
实现
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { // 滚动过程中判断红色view 的位置,如果位于最顶部,就从UIScrollView脱离,添加到self.view,否则就添加到UIScrollView // 当前view距离顶部的距离 CGFloat height = scrollView.contentOffset.y - self.imageView.bounds.size.height; if (height >= 0) { CGRect temp = _oldRect; temp.origin.y = 0; self.redView.frame = temp; [self.view addSubview:self.redView]; } else { self.redView.frame = _oldRect; [self.blueScrollView addSubview:self.redView]; } // 方法照片 CGFloat scale = (1 - scrollView.contentOffset.y/70); NSLog(@"%f",scale); scale = scale >= 1 ? scale : 1; self.imageView.transform = CGAffineTransformMakeScale(scale, scale); }
- (void)viewDidLoad { [super viewDidLoad]; _stopView = [[UIView alloc ]init]; _stopView.frame = self.redView.bounds; _stopView.backgroundColor = self.redView.backgroundColor; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { // 滚动过程中判断红色view 的位置,如果位于最顶部,就从UIScrollView脱离,添加到self.view,否则就添加到UIScrollView // 使用自动布局的话,不能直接修改frame,否则会出问题,所以这里新建一个大小一致的view,显示到self.view, // 当前view距离顶部的距离 CGFloat height = self.imageView.bounds.size.height - scrollView.contentOffset.y; if (height <= 0) { _stopView.hidden = NO; [self.view addSubview:_stopView]; }else { _stopView.hidden = YES; [self.blueScrollView addSubview:self.redView]; } // 缩放图片 CGFloat scale = (1 - scrollView.contentOffset.y/70); scale = scale >= 1 ? scale : 1; self.imageView.transform = CGAffineTransformMakeScale(scale, scale); }