关于CALayer及其和UIView的区别与选择

首先:
CALayer 是定义在 QuartzCore 框架中的
CGImageRef CGColorRef 两种数据类型是定义在 CoreGraphics 框架中的
UIColor UIImage 是定义在 UIKit 框架中的

其次:
QuartzCore
框架和 CoreGraphics 框架是可以跨平台使用的,在 iOS Mac OS X 上都能使用( C 语言编写)
但是 UIKit 只能在 iOS 中使用( Objective-C

为了保证可移植性, QuartzCore 不能使用 UIImage UIColor ,只能使用 CGImageRef CGColorRef
导入其他框架的方式 : 选中项目 , General 中找 Linked Frameworks and Libraries 添加对应的框架


设置一个控件的位置和大小有两种方式:
1.直接设置frame
2.设置bounds和center


设置UIView的背景颜色和透明度,底层都是操作的图层layer的背景颜色和透明度。
设置layer的位置时设置其position属性,设置UIView的center底层调用的是其所在layer的position。

确定layer的位置由position和anchorPoint两个属性决定,将anchorPoint对应到父控件的position点上。


隐式动画:非rootLayer即自己手动创建的layer才具有隐式动画的属性。Animatable properties。每一个UIView内部都默认关联着一个CALayer,称这个Layer为RootLayer。

UIView本身不具备显示的功能,是因为它内部的层layer才有显示功能:



关于UIView和CALayer的选择:



要显示layer阴影,阴影的颜色、宽度、偏移量缺一不可。阴影模糊度shadowRadius
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 CALayer 来模拟 _UIPickerHighlightView 的高亮显示效果。具体实现过程如下: 1.在 UIPickerViewDelegate 的 pickerView(_:viewForRow:forComponent:reusing:) 方法中,创建一个 CALayer 对象,并将其添加到返回的 UIView 对象上。 ```swift func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { // 创建一个 CALayer 对象 let highlightLayer = CALayer() highlightLayer.backgroundColor = UIColor.yellow.cgColor // 设置 CALayer 的位置和大小 highlightLayer.frame = CGRect(x: 0, y: 0, width: pickerView.rowSize(forComponent: component).width, height: pickerView.rowSize(forComponent: component).height) // 将 CALayer 添加到 UIView 上 let view = UIView() view.layer.addSublayer(highlightLayer) return view } ``` 2.在 UIPickerViewDelegate 的 pickerView(_:didSelectRow:inComponent:) 方法中,获取当前选中行的 UIView 对象,并通过其 sublayers 属性获取对应的 CALayer 对象。然后,将选中行的 CALayer 对象的背景色设置为黄色,将其它行的 CALayer 对象的背景色设置为透明色。 ```swift func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { // 获取当前选中行的 UIView 对象 let selectedView = pickerView.view(forRow: row, forComponent: component) // 遍历所有的 CALayer 对象,将选中行的背景色设置为黄色,将其它行的背景色设置为透明色 for layer in selectedView?.layer.sublayers ?? [] { if layer == selectedView?.layer.sublayers?.first { layer.backgroundColor = UIColor.yellow.cgColor } else { layer.backgroundColor = UIColor.clear.cgColor } } } ``` 通过上述代码,我们可以模拟出 _UIPickerHighlightView 的高亮显示效果。需要注意的是,上述代码仅实现了一种简单的高亮显示效果,开发人员可以根据实际需求进行进一步的扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值