当前位置: 首页 > news >正文

网站关键词标签火烈鸟门户网站开发

网站关键词标签,火烈鸟门户网站开发,推广平台免费,给城市建设提议献策的网站前言#xff1a; setNeedsDisplay异步执行的。它会自动调用drawRect方法#xff0c;这样可以拿到 UIGraphicsGetCurrentContext#xff0c;就可以绘制了。而setNeedsLayout会默认调用layoutSubViews#xff0c;处理子视图中的一些数据。 一、着手 我定义了一个UIView的子类… 前言 setNeedsDisplay异步执行的。它会自动调用drawRect方法这样可以拿到 UIGraphicsGetCurrentContext就可以绘制了。而setNeedsLayout会默认调用layoutSubViews处理子视图中的一些数据。 一、着手 我定义了一个UIView的子类用于演示使用setNeedsDisplay这个CircleView子类会在draw(_ rect: CGRect)方法内简单绘制一个圆它有一个颜色属性这是我们将要设置用来改变圆的颜色。 import UIKitclass CircleView: UIView {var color:UIColor UIColor.redoverride func draw(_ rect: CGRect) {let path UIBezierPath(ovalIn: rect)color.setFill()path.fill()}} 复制代码注意 setNeedsDisplayInRect相当于setNeedsDisplay除了它是指定视图的特定矩形区域更新而不是整个视图需要显示。 二、配置属性、组件 应用程序的下一部分是在故事板中配置一些UIKit组件其中一个是CircleView。 为了允许用户更改颜色我已经定义了UIStepper控件我还添加一个按钮这将导致要使用的步进值来调整CircleView的颜色值。我不会详细介绍如何配置storyboard因为重点是了解setNeedsDisplay IBOutlet weak var stepper: UIStepper! //change value,default value is 120. IBOutlet weak var circleView: CircleView! 复制代码IBOutlets可以让我们访问circleViewStepper。对于步进值的变化有IBActions,最后有一个colorChangeBtn它将调用一个未定义的方法changeColorFromStppers方法。该方法将收集步进器的值使用它创建一个UIColor并设置circleView的color属性。 func changeColorFromStppers() {let valueFloat CGFloat(stepper.value)let color UIColor(red:valueFloat/255.0, green:valueFloat/255.0, blue:valueFloat/255.0, alpha:1.0)circleView.color color}复制代码在viewDidLoad中根据故事板中配置的步进器的默认值我触发了一组初始的圆形颜色。该changeColorFromStppers方法创建CGFloat的用于步进数的值创建的UIColor然后设置circleView.color。 override func viewDidLoad() {super.viewDidLoad()self.changeColorFromStppers()} 复制代码三、思考 现在更改stepper的值然后点击colorChangeBtn按钮发现圆形颜色没更新这是什么原因呢 一般来说使用框架控件当您设置属性如显示标签或值时您将会使用该属性这样会导致重新绘制控件因为系统会实现对控件drawRect方法的调用。而我们自定义了自己的UIView子类所以我们需要处理影响显示的控件的更新。在改变颜色的情况下当然需要我们自己控制重新绘制。 根据上一篇文章setNeedsLayout和layoutIfNeeded看我就懂,所以我们在circleView.color color之后添加了对setNeedsLayout或layoutIfNeeded的调用但结果同样不会更新。类似地旋转设备也不会触发重新绘制圆形。这是因为视图的缓存机制即便视图布局发生改变也只是作为缓存。所以我们需要调用setNeedsDisplay明确地告诉系统必须重新绘制从而显示新的颜色 由此我们需要考虑三个重要的原则 1、在iOS中视图很明显会被缓存。通常给定的视图可能会被绘制一次同时也不需要更新。 2、即使视图可能被移动或者有另一个视图重叠也可能不需要重新绘制因此您不能仅仅依靠已经移动整个视图或添加另一个视图基于setNeedsLayout或updateIfNeeded来导致重绘 3、当编写重载drawRect的UIView子类时需要在需要重绘时指示给系统。因为drawRect不能被手动调用所以您需要使用setNeedsDisplay方法告诉系统完成绘图 四、添加setNeedsDisplay 所以接下来我们需要添加setNeedsDisplay()有两种方法 在changeColorFromStppers添加 完整代码如下func changeColorFromStppers() {let valueFloat CGFloat(stepper.value)let color UIColor(red:valueFloat/255.0, green:100/255.0, blue:valueFloat/255.0, alpha:1.0)circleView.color color//告诉系统需要重绘(Tell the system that circleView needs a redraw)circleView.setNeedsDisplay() } 复制代码在CircleView使用didSet属性观擦器 代码完整如下class CircleView: UIView {var color:UIColor UIColor.red {didSet {setNeedsDisplay() //告诉系统重绘界面}}override func draw(_ rect: CGRect) {let path UIBezierPath(ovalIn: rect)color.setFill()path.fill()} } 复制代码这样就能显示了希望大伙能多敲多体会。 效果如下
http://www.sadfv.cn/news/218944/

相关文章:

  • 苏州网站建设外贸莱芜网站优化怎么做
  • 网站建设的征求意见稿外贸网站建站费用
  • 网站建设策划书百度文库php网站开发是什么意思
  • 淘客网站做弹窗广告淮南网吧什么时候恢复营业
  • 各大网站响应生态建设关于做视频网站的一些代码
  • 做淘宝优惠卷网站步骤四大工业设计软件
  • 文网文网站建设企业内部网站制作模板
  • 嘉定网站建设哪里便宜哪些社交网站做外贸比较好
  • wordpress主题公司怎么做网站图片seo
  • excel怎么做超链接到网站网站结构与导航设计
  • 兼职网站建设app开发网站模板
  • 普洱网站搭建沧州网站seo
  • 网站开发主要学些什么软件国际新闻最新消息今天军事
  • 网站 制作水印吸引企业做网站
  • 域名网站教程建站设计公司
  • 淘宝网站c#设计怎么做舆情监测系统方案
  • 电子商务运营实务中网站开发流程开发网站软件
  • 怎么看一个网站是不是织梦jsp网站开发总结
  • 手机怎样做刷赞网站郑州模板网站设计哪家便宜
  • 无锡网站定制公司蒙阴建设局网站
  • 网站制作报价是否合法成都网站建设博客
  • php mysql网站开发全程实例pdfwordpress主题诗词
  • 网站建设实施计划公司部门章有没有法律效力
  • 建设工程职称论文查询网站青岛app软件开发
  • 建立网站项目计划书模板泰兴市网站建设
  • 浙江专业网页设计免费建站佛山网站推广建设
  • 国内ui网站嵌入式软硬件开发
  • 个人网站怎么维护新乡网站建设公司黄页
  • 网站的前端开发淘宝客网站备案信息怎么写
  • 东莞设计网站建设方案安徽网页设计培训