专栏名称: Cocoa开发者社区
CocoaChina苹果开发中文社区官方微信,提供教程资源、app推广营销、招聘、外包及培训信息、各类沙龙交流活动以及更多开发者服务。
目录
相关文章推荐
51好读  ›  专栏  ›  Cocoa开发者社区

iOS开发UIScrollView的底层实现

Cocoa开发者社区  · 公众号  · ios  · 2016-08-17 08:04

正文

请到「今天看啥」查看全文



基于这点我们很容易实现一个简单的最初级版本的scrollView,代码如下:


- (void)panGestureAction:(UIPanGestureRecognizer *)pan {

// 记录每次滑动开始时的初始位置

if (pan.state == UIGestureRecognizerStateBegan) {

self.startLocation = self.bounds.origin;

NSLog(@"%@", NSStringFromCGPoint(self.startLocation));

}

// 相对于初始触摸点的偏移量

if (pan.state == UIGestureRecognizerStateChanged) {

CGPoint point = [pan translationInView:self];

NSLog(@"%@", NSStringFromCGPoint(point));

CGFloat newOriginalX = self.startLocation.x - point.x;

CGFloat newOriginalY = self.startLocation.y - point.y;

CGRect bounds = self.bounds;

bounds.origin = CGPointMake(newOriginalX, newOriginalY);

self.bounds = bounds;

}

}


3. 理解了上边内容的关键点,下边我们将对我们实现的scrollView做一个简单的优化。 通过contentSize限制scrollView的内部空间,实现代码如下


if (newOriginalX

newOriginalX = 0;

} else {

CGFloat maxMoveWidth = self.contentSize.width - self.bounds.size.width;

if (newOriginalX > maxMoveWidth) {

newOriginalX = maxMoveWidth;

}

}

if (newOriginalY

newOriginalY = 0;

} else {

CGFloat maxMoveHeight = self.contentSize.height - self.bounds.size.height;

if (newOriginalY > maxMoveHeight) {

newOriginalY = maxMoveHeight;

}

}


通过contentOffset设置scrollView的初始偏移量,相信大家已经懂了如何设置偏移量了吧?没错我们只需设置view自身bounds的origin是实现代码如下:


- (void)setContentOffset:(CGPoint)contentOffset {

_contentOffset = contentOffset;

CGRect newBounds = self.bounds;







请到「今天看啥」查看全文