首页 > 其他分享 >Uikit学习笔记

Uikit学习笔记

时间:2023-02-28 20:24:01浏览次数:31  
标签:委托 Uikit self bounds 笔记 学习 let frame view

  1. Dismiss让当前模态跳转的页面消失,返回到旧页面

  2. 一个对象可以同时拥有数据和功能

  3. 一般把变量放在方法的上面

  4. lround()把slider.value四舍五入

  5. Int(acr4_random(100))获取0~99内的一个随机整数

  6. 按住ctrl从View Controller(黄色图标的那个)往标签上拖(;注意:直接在标签上按住ctrl拖拽到view controller是没有用的,不要弄反了。动作是从view controller往下拖

  7. 仅仅是声明你有一个变量是不能自动创建一个相应的对象的。这个变量仅仅是对象的容器。你还需要实例化这个对象并且将它放入容器中。变量只是一个盒子,而对象是盒子中的内容。

  8. 如何定义一个委托
    在iOS系统的SDK里,委托无处不在,所以我们最好记住它总是由三个步骤完成。
    1、你申明自己有能力成为一个委托——成为UITextField的委托你需要将UITextFieldDelegate写到视图控制器的类的声明中去。这样就告诉了编译器这个视图控制器可以处理来自文本框的消息。
    2、你让那个有问题的对象知道视图控制器愿意成为它的委托——在我们这个例子里,这个对象是UITextField。如果你忘记了告诉文本框它有一个委托,则这个文本框永远不会发送任何消息。
    3、执行委托方法——如果你没有对你发出的消息进行响应,那么委托根本不会成立。
    通常,委托方法是可选的,所以你不需要执行全部的委托方法。例如:UITextFieldDelegate实际上声明了七个方法但是你仅仅关心textField(shouldChangeCharactersIn, replacementString)这一个。
    五步定义委托
    在两个对象之间创建委托可以用以下固定的步骤,比如对象A是对象B的委托,对象B发送消息返回给对象A,步骤如下:
    1、为对象B定义一个委托协议
    2、给对象B一个可选型的委托变量,这个变量必须是weak的。
    3、当某些事件触发时,让对象B发送消息到它的委托,比如用户点击Cancel或者Done按钮时,或者它需要一点信息时。你可以用语句delegate?.methodName(self,...)来完成这个功能。
    4、让对象A遵守委托协议。将协议的名称放入类声明,class的哪一行,并且执行协议中的方法列表。
    5、告诉对象B,对象A现在是你的委托了。

  9. indexPath是一个指向表中具体某一行的一个简单的对象。当table view为cell请求数据源时,你可以通过这一行的indexPath.row属性的内部行号,就可以找到是哪个cell需要数据了。
    delegate?.addItemController(self, didFinishAdding: item)
    复习一下整个过程:
    1、创建一个新的ChecklistItem对象
    2、将这个新创建的对象添加到数据模型中
    3、为它在table view插入一个新的cell

  10. let VC = ViewControllerTwo()

    ​ VC.modalPresentationStyle = .fullScreen

    可以设置present的形式

  11. import UIKit

    class ViewController: UIViewController {

    override func viewDidLoad() {
     
        super.viewDidLoad()
    

        let btn1 = createButton("左上")
     
        self.view.addSubview(btn1)



​ let btn2 = createButton("右上")

btn2.frame.origin.x = self.view.bounds.width - btn2.frame.width

        self.view.addSubview(btn2)



​ let btn3 = createButton("左下")

btn3.frame.origin.y = self.view.bounds.height - btn3.frame.height

        self.view.addSubview(btn3)



​ let btn4 = createButton("右下")

btn4.frame.origin = CGPoint(x: self.view.bounds.width - btn4.frame.width,

            y: self.view.bounds.height - btn4.frame.height)
     
        self.view.addSubview(btn4)



​ let btn5 = createButton("居中")

btn5.center = CGPoint(x: self.view.bounds.width / 2,

            y: self.view.bounds.height / 2)
     
        self.view.addSubview(btn5)



​ let btn6 = createButton("上中")

btn6.center.x = self.view.bounds.width / 2

        self.view.addSubview(btn6)



​ let btn7 = createButton("左中")

btn7.center.y = self.view.bounds.height / 2

        self.view.addSubview(btn7)



​ let btn8 = createButton("右中")

btn8.frame.origin.x = self.view.bounds.width - btn8.frame.width

        btn8.center.y = self.view.bounds.height / 2
     
        self.view.addSubview(btn8)



​ let btn9 = createButton("下中")

btn9.center.x = self.view.bounds.width / 2

        btn9.frame.origin.y = self.view.bounds.height - btn9.frame.height
     
        self.view.addSubview(btn9)
     
    }



​ func createButton(title: String) -> UIButton {

//创建一个ContactAdd类型的按钮

        let button:UIButton = UIButton(type:.Custom)
     
        //设置按钮大小
     
        //button.frame=CGRectMake(0, 0, 80, 50)
     
        button.frame.size = CGSize(width: 80, height: 50)
     
        //设置按钮文字
     
        button.setTitle(title, forState:UIControlState.Normal)
     
        button.backgroundColor=UIColor.orangeColor()
     
        return button
     
    }

    override func didReceiveMemoryWarning() {
     
        super.didReceiveMemoryWarning()
     
    }

}
  1. func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow window to the provided UIWindowScene scene.
    // If using a storyboard, the window property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see application:configurationForConnectingSceneSession instead).

    self.window = UIWindow(windowScene: scene as! UIWindowScene);
    self.window?.backgroundColor = UIColor.white;
    let rootViewController = ViewController();
    self.window?.rootViewController = rootViewController;
    self.window?.makeKeyAndVisible();

    guard let _ = (scene as? UIWindowScene) else { return }
    }

  2. 如果要添加手势 UILabel().isUserInteractionEnable = true

  3. command + shift + L 控件库

  4. 添加手势时候要实力化具体的手势

let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
        tapLabel.addGestureRecognizer(tap)

如果只写UIGestureRecognizer则不行

  1. let onedegree = CGFloat.pi / 180

    ​ imageView.transform = CGAffineTransform(rotationAngle: CGFloat( 90 * onedegree))

    iOS坐标系和数学上是相反的,正数为顺时针,负数为逆时针

  2. UIView.animate(withDuration: 3, delay: 0, options: .curveEaseIn){
            self.imageView.transform = CGAffineTransform(translationX: 100, y: 100).scaledBy(x: 2, y: 2).rotated(by: 90 * onedegree)
        }
    

18.在使用Autolayout时,发现leftAnchor和LeadingAnchor,让我很困惑
经过一番查阅后,理解如下:

在大部分情况下,leftAnchor(左)和LeadingAnchor(前导)相等,因为大部分情况下,文字阅读是从左至右的(英语,法语,西班牙语等)。左(和trailingAnchor(尾随)和右)可以互换使用。
在部分情况,如读取方向从右到左(例如希伯来语)的区域中,LeadingAnchor(前导)将是rightAnchor(右)

这就和文字阅读习惯,和语言有关。一般情况下我们是不用区分,除非考虑这些case

  1. cornerradius设置为高度的一半就为圆形
  2. 给stackView添加子视图,要用arragnedSubviews
  3. Command + f全部替换

标签:委托,Uikit,self,bounds,笔记,学习,let,frame,view
From: https://www.cnblogs.com/linhongyu0090/p/17165835.html

相关文章

  • Git学习笔记
    新建文件夹mkdir进入文件夹cd显示当前目录pwd修改文件viEsc退出输入状态shift+;+q!不保存文件的写入修改shift+;+wq!是保存文件的写入修改查看上......
  • 毕业设计相关论文学习
    毕业设计相关论文及学习1.基于多元线性回归方法的疫情监测系统研究[1]夏婉玉.基于多元线性回归方法的疫情监测系统研究[D].武汉工程大学,2022.DOI:10.27727/d.cnki.gwh......
  • 组合数学笔记-排列与组合
    目录排列与组合排列排列的定义与基本性质错位排列错位排列的定义与基本性质圆排列圆排列的定义与基本性质多重集排列多重集排列的定义与基本性质组合组合的定义与基本性质......
  • IaaS--云硬盘(何恺铎《深入浅出云计算》笔记整理)
     【概念】云硬盘,又叫做“云盘”或者“云磁盘”,就是云虚拟机上可以挂载和使用的硬盘。这里,它既包含了用于承载操作系统的系统盘,也包括了承载数据的数据盘。云厂商对于云......
  • react-native学习记录1(都是坑,各种版本问题,让人望而却步)
    1.环境搭建https://zhuanlan.zhihu.com/p/528196912?utm_id=02.创建项目npxreact-nativeinitsomeProject--version0.66.0npxreact-nativerun-android生命周期,路由,......
  • 学习笔记287—为什么要开发 Go 这门新语言?有什么优势?
    编程语言已经非常多,偏性能敏感的编译型语言有C、C++、Java、C#、Delphi和Objective-C等,偏快速业务开发的动态解析型语言有PHP、Python、Perl、Ruby、JavaScript和Lua等,面......
  • 组合数学笔记-计数原理
    目录计数原理基本计数原理加法原理(分类)乘法原理(分步)减法原理(正难则反)除法原理(等价划分)重要计数原理抽屉原理(鸽巢原理)容斥原理约定:本笔记涉及的一切变量,若未特殊指明,则默......
  • 联想拯救者Y7000P笔记本电脑风扇异响更换风扇记录
    情况描述:联想拯救者Y7000P笔记本右侧显卡风扇异响我把耳朵靠近,明显能听到笔记本的发出的异响声音,之前以为散热不行,加了点硅胶,不久后又出现这个风扇异响了。​右侧这边是显卡......
  • 2月28日学习总结
    上午智慧物业管理系统Java开发有一个三层规范(包结构)controllerfileController:文件的上传的与删除service(重点)dao持久层domain:实体类的包,与数据库中的表建立映射关系,操作实体......
  • 巧用 ChatGPT,让开发者的学习和工作更轻松
    引言随着人工智能技术的快速发展和广泛应用,ChatGPT作为一种新兴的自然语言处理模型,近期备受瞩目,引发了广泛讨论。ChatGPT具有多种应用场景,既可以用作聊天机器人,实现智能问......