美文网首页
CoreAnimation之CAScrollLayer

CoreAnimation之CAScrollLayer

作者: MacPen | 来源:发表于2017-12-18 17:15 被阅读18次

CAScrollLayer和UIScrollView的显示功能是一样的,可以滚动显示比窗口更大的内容,只是CAScrollLayer不能响应交互事件,并且不会显示滚动条,内容的滚动要通过代码进行控制。
主要参数说明:

scrollMode 允许滚动的方向
    kCAScrollNone 禁止滚动
    kCAScrollVertically 只允许垂直滚动
    kCAScrollHorizontally 只允许水平滚动
    kCAScrollBoth 可以随便滚动,默认
visibleRect 可见区域范围

    //1.创建CAScrollLayer
    self.scrollLayer = [CAScrollLayer layer];
    self.scrollLayer.scrollMode = kCAScrollBoth;
    self.scrollLayer.frame = CGRectMake(120, 150, 100, 100);
    //2.创建内容layer
    CAShapeLayer *contentLayer = [CAShapeLayer layer];
    contentLayer.frame = CGRectMake(0, 0, 213, 108);
    contentLayer.contents = (id)[UIImage imageNamed:@"ss(4)"].CGImage;
    //3.添加图层
    [self.scrollLayer addSublayer:contentLayer];
    [self.view.layer addSublayer:self.scrollLayer];
    //4.添加手势
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    [self.view addGestureRecognizer:pan];

通过在view上添加拖拽手势,通过scrollToPoint:来控制显示的区域的位置。

- (void)handlePan:(UIPanGestureRecognizer *)gesture {
    CGPoint translation = [gesture translationInView:self.view];
    CGPoint origin = self.scrollLayer.bounds.origin;
    origin = CGPointMake(origin.x-translation.x, origin.y-translation.y);
    [self.scrollLayer scrollToPoint:origin];
    translation = CGPointZero;
    [gesture setTranslation:CGPointZero inView:self.view];
}
scrollLayer.gif

相关文章

网友评论

      本文标题:CoreAnimation之CAScrollLayer

      本文链接:https://www.haomeiwen.com/subject/wfmmwxtx.html