ios 翻页效果动画

ios 翻页效果动画,第1张

项目当中要实现一个电子档案,效果呢是类似小说翻页的效果。很简单,先来说一下实现思路

写一个用来接收你想展示信息的控件,如果只是文字展示,那就label,如果带图片什么的,那就自定义一个view

然后就是左右滑动的手势,在左右手势实现方法中做数据判断展示,加上动画效果就ok 了

1、在self.view 上创建label

2、添加左右手势

3、根据左右手势实现方法,给 label.text 数组判断赋值

4、执行翻页动画

- ( void )viewDidLoad {

    [ super viewDidLoad]

     self .view.backgroundColor = [UIColor whiteColor]

    _arr = @[@"11111",  @"22222", @"33333",@"44444",@"55555"]

    [ self buildLable]

    [ self configTapGes]

    _count=0

}

#pragma mark - label

- ( void )buildLable {

    _labelView= [[UIViewalloc]init]

    [ self .view addSubview:_labelView]

    [_labelView mas_makeConstraints:^(MASConstraintMaker *make) {

        make.centerX.equalTo( self .view.mas_centerX)

        make.centerY.equalTo( self .view.mas_centerY)

        make.width.mas_offset(WIDTH-40)

        make.height.mas_offset(500)

    }]

    _labelView.backgroundColor = [UIColor orangeColor]

    _label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, WIDTH-40, 500)]

    _label.backgroundColor = [UIColor grayColor]

    _label.numberOfLines = 0

    _label.text = [_arr objectAtIndex:0]

    [ self .labelView addSubview:_label]

}

#pragma mark - 手势

- ( void )configTapGes {

    _fromRightSwip= [[UISwipeGestureRecognizeralloc]initWithTarget: self action: @selector (nextPage:)]

    _fromRightSwip.direction = UISwipeGestureRecognizerDirectionLeft

    [ self .view addGestureRecognizer:_fromRightSwip]

    _fromLeftSwip= [[UISwipeGestureRecognizeralloc]initWithTarget: self action: @selector (forwardPage:)]

    _fromLeftSwip.direction = UISwipeGestureRecognizerDirectionRight

    [ self .view addGestureRecognizer:_fromLeftSwip]

}

#pragma mark - 下一页按钮响应事件

- ( void )nextPage:(UIButton*)btn {

     if (_count<_arr.count-1) {

        _label.text= [_arrobjectAtIndex:_count+1]

        NSString*subtypeString

        subtypeString =kCATransitionFromRight

        [ self transitionWithType:@"pageCurl" WithSubtype:subtypeString ForView:_labelView]

        _count=_count+1

    } else {

        _count=_arr.count-1

//        [self showAlert:@"已经是最后一页"]

    }

    NSLog(@"下一页:%ld", ( long )_count)

}

#pragma mark - 上一页按钮响应事件

- ( void )forwardPage:(UIButton*)btn {

     if (_count>0) {

        _label.text= [_arrobjectAtIndex:_count-1]

        NSString*subtypeString

        subtypeString =kCATransitionFromLeft

        [ self transitionWithType:@"pageCurl" WithSubtype:subtypeString ForView:_labelView]

        _count=_count-1

    } else {

        _count=0

//        [self showAlert:@"已经是第一页"]

    }

    NSLog(@"上一页:%ld", ( long )_count)

}

#pragma CATransition动画实现

/**

 *  动画效果实现

 *

 *  @param type    动画的类型 在开头的枚举中有列举,比如 CurlDown//下翻页,CurlUp//上翻页

,FlipFromLeft//左翻转,FlipFromRight//右翻转 等...

 *  @param subtype 动画执行的起始位置,上下左右

 *  @param view    哪个view执行的动画

 */

- ( void )transitionWithType:(NSString*) typeWithSubtype:(NSString*) subtypeForView: (UIView*) view {

    CATransition *animation = [CATransition animation]

    animation.duration=0.7f

    animation.type= type

    if (subtype != nil ) {

        animation.subtype= subtype

    }

    animation.timingFunction = UIViewAnimationOptionCurveEaseInOut

    [view.layeraddAnimation:animationforKey:@"animation"]

}

问题:YYLabel继承于UIView不支持项目本身的自定义表情,UILabel能正常显示自定义表情,pass

思路:手动获取label的显示字符个数,自己处理展示逻辑+点击逻辑

手动获取label的显示字符个数

1.用UITextView的链接,有点瑕疵。

具体为:点击一下会出现灰色背景色,长按会出现一个菜单,还有剪切复制菜单。

txtView.isSelectable = false // 同时禁用了可选和超链接跳转

canPerformAction return false // 不显示菜单栏了,但是仍然可选

添加长按手势以屏蔽默认的手势 // 不能屏蔽

添加自定义手势,并禁用掉其他手势 // do work

2.用CoreText的点击

瑕疵:

展开文案没有完全居右

收起的点击区域不太准确

带表情的多行文本展示了2行

3.保底方案

另起一行展开/收起,不追加在内容后面。

遇到问题:展开收起-tabview闪动

禁用掉预估高度,然后手动计算cell高度即可

1、let line: CTLineRef = CFArrayGetValueAtIndex(lines, 0)

这会产生错误“’ConstUnsafePointer<()&'不能转换为'CTLineRef''. Cast似乎没有改变这个错误

let line: CTLineRef = lines[0]

产生错误“’CFArrayRef’没有名为’subscript’的成员”

改用unsafeBitCast即可

Swift 类型UnsafeRawPointer转化报错

2、ios获取UILabel每行显示的文字

https://www.jianshu.com/p/65a07b6013c7

3、iOS 富文本添加点击事件

https://www.jianshu.com/p/480db0cc7380

4、iOS中CoreText框架探究

https://www.jianshu.com/p/9987e6194b2e

5、展开收起-tabview闪动

禁用掉预估高度,然后手动计算cell高度即可


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11559354.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存