自定义UIPageControl、UITextView占位视图

一言不合先上效果图:


①、自定义的UIPageControl是继承于UIView,封装好的,可以设置图标大小,形状,图片 ,颜色,间隔,当然,需要的话,也可以自定义图标视图;详情请按快捷键Ctrl + B传送!


②、创建有占位视图的UITextView,主要涉及NSTextStorage、NSLayoutManager、NSTextContainer、UIBezierPath几个类,主要代码如下:

NSString * title = @"我是且行且珍惜_iOS?.如果喜欢的话,点个喜欢呗,点个关注呗,赏根辣条呗!哈萨米达!么么哒!https://github.com/wslcmk";
//段落样式
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
//调整行间距
paragraphStyle.maximumLineHeight = 22;
paragraphStyle.minimumLineHeight = 22;
NSDictionary *attributeDictionary = @{NSFontAttributeName : [UIFont fontWithName:@"AmericanTypewriter" size:12],NSForegroundColorAttributeName :[UIColor whiteColor],NSParagraphStyleAttributeName : paragraphStyle };

//文本存储
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithString:title];
[textStorage addAttributes:attributeDictionary range:NSMakeRange (0, [title length])];

//布局管理
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
[textStorage addLayoutManager:layoutManager];

//文本容器
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:CGSizeMake(self.view.frame.size.width - 16, 48)];
textContainer.lineFragmentPadding = 0;
textContainer.lineBreakMode = NSLineBreakByTruncatingTail;

//抠取容器UITextView的两个部分
CGRect btnRect = CGRectMake((self.view.frame.size.width - 16)/ 2 - 15,10,40,40);
UIBezierPath *newPath = [UIBezierPath bezierPathWithRect:btnRect];
CGRect imageRect = CGRectMake(0,0,20 + 4,20 + 2);
//贝塞尔
UIBezierPath *newPath1 = [UIBezierPath bezierPathWithRect:imageRect];
textContainer.exclusionPaths = @[newPath,newPath1];
[layoutManager addTextContainer:textContainer];

  UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(8, 200, self.view.frame.size.width - 16, 48) textContainer:textContainer];
[textView sizeToFit];
textView.editable = NO;
textView.backgroundColor = [UIColor orangeColor];
//如果设置为YES,设置的lineBreakMode就没有作用了
textView.scrollEnabled = NO;
textView.textContainerInset = UIEdgeInsetsMake (0,0,0,0);

//自动布局后容器的Frame
CGRect containerRect = [[textView layoutManager] usedRectForTextContainer:textContainer];
textView.frame = CGRectMake(8,200, containerRect.size.width, 48);
[self.view addSubview:textView];  

需要Demo请移驾https://github.com/wslcmk/UIPageControlAndUITextView.git

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏進无尽的文章

实践 -实现一款中间凸起的TabBar

这是看到一篇文章后感觉很有意思于是就把自己的效果改了改实现了一下,文末有原文链接。

22020
来自专栏一“技”之长

iOS UIStepper(步进控件)使用总结

@property(nonatomic,getter=isContinuous) BOOL continuous;

8720
来自专栏每日一篇技术文章

SceneKit_入门06_行为动画

a.移动相对于当前位置 + (SCNAction *)moveByX:(CGFloat)deltaX y:(CGFloat)deltaY z:(CGFloat...

19310
来自专栏非典型技术宅

iOS动画系列之一:带时分秒指针的时钟动画(上)1. 最终实现的效果以及思维导图2. CALayer3. 隐式动画

70730
来自专栏向治洪

iOS动画总结

在iOS开发中,动画是提高用户体验重要的环节之一。一个设计严谨、精细的动画效果能给用户耳目一新的效果,这对于app而言是非常重要的。 简介 iOS动画主要是指C...

30680
来自专栏ShaoYL

UIScrollView

34760
来自专栏ShaoYL

iOS-UI控件之UIButton

32660
来自专栏向治洪

React Native 自定义控件专题

React Native通过近两年的迭代和维护,最新版本已经到了0.45.1,关于最新版本的介绍请查看我之前的博客:0.45新特性。话说回来,尽管迭代的挺快,但...

50660
来自专栏一“技”之长

iOS开发CoreAnimation解读之二——对CALayer的分析

        每一个UIView的对象中都有一个layer这样的属性,并且layer会负责view中有关图形绘制的相关操作,例如我们设置view的背景颜色和设...

9120
来自专栏mukekeheart的iOS之旅

iOS学习——UIPickerView的实现年月选择器

  最近项目上需要用到一个选择器,选择器中的内容只有年和月,而在iOS系统自带的日期选择器UIDatePicker中却只有四个选项如下,分别是时间(时分秒)、日...

927130

扫码关注云+社区

领取腾讯云代金券