iOS中容易用错的常用知识点

这篇具有很好参考价值的文章主要介绍了iOS中容易用错的常用知识点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

坐标系转换
ios中的坐标系有三种
视图坐标系:原点(0,0)视图的左上角
窗口坐标系:原点(0,0)窗口的左上角
世界坐标系:原点(0,0)游戏中世界的原点

平时开发中经常会遇到转UIWindow坐标问题,如:已知一个UI控件的坐标,把它转换到UIWindow时,它对应的UIWindow坐标是什么?
苹果提供了一套相关的转换方法,但是它缺少了坐标在转换时会涉及到三个UIView, 方法中没有对这3个UIView关系的描述,这在使用坐标转换时就很容易搞迷糊了。
open func point(inside point: CGPoint, with event: UIEvent?) -> Bool

open func convert(_ point: CGPoint, to view: UIView?) -> CGPoint

open func convert(_ point: CGPoint, from view: UIView?) -> CGPoint

open func convert(_ rect: CGRect, to view: UIView?) -> CGRect

open func convert(_ rect: CGRect, from view: UIView?) -> CGRect
举例如下:
override func viewDidLoad() {
    super.viewDidLoad()
    
    view.addSubview(myButton)
    
    let center2 = view.convert(myButton.center, to: UIApplication.shared.keyWindow)
}
下面这件代码的意思是将self.view下面的子视图self.myButton的中点从它的视图坐标系中转换到keyWindow的窗口坐标系中时,得到的坐标是什么。
这句代码种涉及到的三个UIView: self.view, self.myButton, keyWindow。其中self.myButton是self.view的子视图。这层关系需要清楚,就避免迷糊了。
view.convert(myButton.center, to: UIApplication.shared.keyWindow)

 文章来源地址https://www.toymoban.com/news/detail-465868.html

自定义UIButton中Image和title的位置关系
UIButton中Image和title的位置坐标是可以自定义调整的,弄懂了下面这些就不用经常在UIView里套Image和Label来自定义视图了。

前置条件
手写UIButton时,ButtonType选择custom,style设置为Default(这个没有找到设置的地方,在xib上有这项,实际上手动创建的代码style默认就是Default)
使用xib创建的UIButton时,把它的plain改成Default。ButtonType设置成custom。
就是截图中的上面2项:
iOS中容易用错的常用知识点
已知概念
1.UIButton中的image和image现在默认是上下,左右居中,并且image和title在水平方向是挨着的。
btn.contentEdgeInsets = .zero
btn.imageEdgeInsets = UIEdgeInsets(top: 2, left: 2, bottom: 2, right: 25)
btn.titleEdgeInsets = UIEdgeInsets(top: 2, left: 12, bottom: 2, right: 2)
2.上面btn相关的EdgeInset值的设置的效果 是和css中的padding内边距效果一致的。即:值>0内容向内缩,值<0内容往外扩展。
3.image和title具有中间挨着的特性,默认情况下,无论image左移多少,title都会跟随左移多少,以满足image和title中间挨着的特性。
4.对于设置的EdgeInset中的偏移量是相对于image和title在没有设置任何偏移量时的默认状态的偏移。

了解了上面这些概念就可以愉快的自定义UIButton中image和lable的位置了。
let btn = UIButton(type: .custom)
btn.frame = CGRect(x: 100, y: 80, width: 40, height: 20)
btn.setTitleColor(.white, for: .normal)
btn.setTitle("jack", for: .normal)
btn.titleLabel?.font = UIFont.systemFont(ofSize: 10)
btn.setImage(UIImage.init(named: "loveHeat"), for: .normal)
btn.backgroundColor = UIColor.black.withAlphaComponent(0.6)
btn.layer.cornerRadius = 4;
btn.layer.masksToBounds = true;
btn.imageEdgeInsets = UIEdgeInsets(top: 3, left: 2, bottom: 1, right: 25)
btn.titleEdgeInsets = UIEdgeInsets(top: 0, left: 1, bottom: 0, right: 0)
btn.isUserInteractionEnabled = false
 
图层遮罩mask
在APP启动引导页或者APP中的气泡弹窗时,经常会用到图层的mask遮罩来自定义一些气泡形状。当向view.layer的mask属性添加一个图层属性时,有时候会搞混乱,这两个图层都有内容,它们作用在一起后,最终的显示效果是哪个展示,哪个不展示呢
view.layer.mask = maskLayer
简单的理解为:将view.layer中的页面内容按照maskLayer的路径进行裁剪。得出一个有一定路径边界的view视图。
举例如下:
let view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
view.backgroundColor = .red

let maskLayer = CAShapeLayer()
let path = UIBezierPath(ovalIn: view.bounds)
maskLayer.path = path.cgPath

view.layer.mask = maskLayer

这里我们首先创建了一个红色的 UIView,然后创建了一个圆形的 CAShapeLayer,将其 path 属性设置为一个内切于 view 边界的圆形 UIBezierPath,最后将 view 的 mask 属性设置为这个 CAShapeLayer,这样就实现了将视图裁剪成圆形的效果。 

获取keyWindow
从iOS 13开始,应用程序可能同时包含多个场景(多个窗口),所以要获取keyWindow的话,已经不能直接读取UIApplication中的kewWindow这种方式了。
而是需要通过connectedScenes属性获取所有连接的场景(Scene),然后选择第一个场景,并将其转换为UIWindowScene类型。
然后从该场景中选择第一个UIWindow对象,判断该对象被是否被标记为isKeyWindow,如果返回true,则表示当前window为keyWindow。
代码如下:
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
   let window = windowScene.windows.first(where: { $0.isKeyWindow }) {
    // 在这里使用当前正在使用的window对象
}

 

 

 

 

到了这里,关于iOS中容易用错的常用知识点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux知识点 -- 基础IO(二)

    在上面的代码中,fprintf本来是向stdout中打印的,但是stdout关闭了,实际上fprintf事项fd是1的文件中打印,这里log.txt的fd就是1; 运行结果为: 这就叫做 输出重定向 ; 上面的代码将stdout关闭了,并打开log.txt文件,则log.txt文件的fd就是1; 在系统中,stdout就代表着fd为1,所以默

    2024年02月15日
    浏览(26)
  • react常用知识点

    React是一个用于构建用户界面的JavaScript库。以下是React常用的知识点: 组件:React将用户界面分解成小而独立的组件,每个组件都有自己的状态和属性,并且可以通过组合这些组件来构建复杂的用户界面。 JSX:JSX是一种类似HTML的语法扩展,它允许在JavaScript代码中编写类似X

    2024年02月15日
    浏览(36)
  • go常用知识点

    go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct 打包一个目录下的多个包时 go build ./… go install ./… 测试时,命令行:go test . //目录下所有单元测试都会执行 go test -v 目录 //测试覆盖率 go test -cover //使用coverprofile生成out文件来记录 //然后使用go tool cover -html c.out来打开 g

    2024年02月15日
    浏览(56)
  • FPGA面试-常用知识点

    本贴记录一下自己找工作过程中顺下来的知识点,如有错误的,请不吝指出,共同进步!   a) FPGA FPGA 基于 LUT ,LUT本质上就是一个RAM,每一个LUT可以看成一个有4位地址线的16x1的RAM。这也是为什么FPGA需要外接一个rom来上电配置。 包括 CLBs , I/O 块, RAM 块和可编程连线 。 在

    2024年04月26日
    浏览(30)
  • PLSQL一些常用的知识点

    此处简单的记录一下在 oracle中如何使用plsql语法,记录一些简单的例子,防止以后忘记。 统计总共有多少个学生,并进行if判断。 输出1到100 需要放到 execute immediate 中执行,否则会报错。 存在更新,不存在插入。 包头 可以简单的理解 java 中的接口。 包体 可以简单的理解

    2024年02月04日
    浏览(30)
  • python常用的函数和知识点

    三元运算符是 if-else 语句的简写。语法是value_if_true if condition else value_if_false。三元运算符是一行代码,可以替代多行 if-else 语句,使你的代码更加简洁。 上面的代码通过检查“a”是否大于“b”,如果为真则返回“a”,如果为假则返回“b”。 enumerate()函数向可迭代对象添加

    2024年02月13日
    浏览(29)
  • vue3常用知识点梳理

    vue3中一个新的配置项,值为函数。组件中所用到的数据,方法,生命周期,监视属性,计算属性等都要配置在setup中。 setup函数的两种返回值         1,若返回一个对象,则对象中的属性、方法, 在模板中均可以直接使用。         2,若返回一个渲染函数:则可以自定义渲染

    2024年01月25日
    浏览(35)
  • 【小程序】常用方法、知识点汇总1

    欢迎来到《小5讲堂》 这是《小程序》系列文章,每篇文章将以博主理解的角度展开讲解, 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 最近在开发微信小程序,时间久了总会把一些常用的方法忘记了, 因此这篇文章汇总下一些接触到且容易忘记的知识

    2024年04月11日
    浏览(31)
  • 前端工作中常用 CSS 知识点整理

    1.1文字溢出省略号 文字单行溢出: 多行文字溢出: 1.2css变量 CSS变量 又称 CSS自定义属性 ,通过在 css 中自定义属性 --var 与函数 var() 组成, var() 用于引用自定义属性。谈到为何会在 CSS 中使用变量,以下使用一个示例讲述。 1.3渐变 渐变分为 线性渐变 、 径向渐变 ,这里笔者直

    2024年02月15日
    浏览(34)
  • JQuery、JSON、AJAX、XML、IO流、多线程、反射核心知识点详解

    一、什么是JQuery     JQuery是JavaScript的一个框架,对js的封装,使得js简单易学     优点:         1、不用考虑浏览器兼容性问题         2、jquery拥有强大的选择器,简化了js代码         3、jquery提供了很多系统函数,直接调用 二、版本         1.x版本:兼

    2024年02月07日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包