写一个用来接收你想展示信息的控件,如果只是文字展示,那就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高度即可
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)