zoukankan      html  css  js  c++  java
  • Swift -- 官方文档Swift-Guides的学习笔记

    在经历的一段时间的郁闷之后,我发现感情都是虚伪的,只有代码是真实的(呸)

    因为看了swift语法之后依然不会用swift,然后我非常作死的跑去看官方文档,就是xcode里自带的help》documentation and API reference

    其中的swift里的guide

    这里主要总结一下里面每一章讲了什么,还有自己学到的东西和需要研究的东西

    part 2:Building a Basic UI

    work with view controllers

    关于比较基础的viewDidLoad,viewWillApper,viewDidAppear这三个方法的执行顺序和作用,因为之前就知道所以没啥感觉,就是看英语太费劲

    然后就是把ImageView拉线拉到代码里,按住control键用鼠标直接从xib里拖过去

    但是这里的约束只设置了Aspect Ratio,其他的都没有设置,我感觉拉约束这一点还要再学习一下

    然后又讲了一下assers.xcassets的作用,就是把图片放进去

    然后又给这个imageView添加了一个手势,直接从控件列表里把收拾拖到imagveiw上面就成了,特别快

    之后把手势Control-drag到代码里,type选择UITapGestureRecognizer,代码里就多了一个手势的方法

    关于调用手机里的图片的方法,在手势触发之后,创建图片选择器,设置给选择器设置代理,然后弹出图片选择器,在选择器的代理方法里把选定的图片给imageView,然后移除选择器

    我学到的:代理方法是不用写override的

    Implement a Custom Control

    这章感觉学到的挺多的

    1在swift中将xib里的view和自己创建的文件连接起来

    首先创建一个文件,UIView类型的,然后在xib里创建一个view,在属性栏class那里填上自己创建的文件的名字,那么这个view就和自己创建的文件关联起来了

    2 init

    在这里有一个init(frame:) 和init(coder:) 如果是自己手动添加的view使用init(frame:) 来初始化,如果是xib中的view使用init(coder:)来初始化,所以这里使用init(coder:)

    基本格式是

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    

    3 intrinsicContentSize()

    这个函数是用来告诉xib你的view基础尺寸是多大,虽然还不知道啥时候调用

    override func intrinsicContentSize() -> CGSize {
        return CGSize( 240, height: 44)
    }
    

    4 layoutSubViews()

    因为创建的view的大小是固定的,所以往上面添加view的时候,使用的是frame,所以可以用到这个函数来改变subViews的大小

    override func layoutSubviews() {
    }
    

    5 给属性添加监听

    这个当初也看过,然后现在也不记得了,,,

        var rating = 0 {
            didSet{
                setNeedsLayout()
            }
        }
    

    6 声明一个数组

    也是看过不记得系列

    var ratingButtons = [UIButton]()
    

    7 如何在swift中声明一个button

                let button = UIButton()
                
                button.setImage(emptyStarImage, forState: .Normal)
                button.setImage(filledStarImage, forState: .Selected)
                button.setImage(filledStarImage, forState: [.Highlighted,.Selected])
                
                button.adjustsImageWhenDisabled = false
                
                button.addTarget(self, action: #selector(ratingButtonTappped(_:)), forControlEvents: .TouchDown)
                ratingButtons += [button]
                addSubview(button)
    

    swift里的各种省略主语,用点来代替,很方便,可惜我有点晕

    特别是addSubView这个函数,我到底add到哪里貌似不知道啊,我要是想add到其他的view上面咋整啊

    let buttonSize = Int(frame.size.height)

    获取在xib是view的尺寸

    所有的代码

    //
    //  RatingControl.swift
    //  FoodTracker
    //
    //  Created by chebao on 16/9/13.
    //  Copyright © 2016年 chebao. All rights reserved.
    //
    
    import UIKit
    
    class RatingControl: UIView {
    //MARK:Properties
        var rating = 0 {
            didSet{
                setNeedsLayout()
            }
        }
        var ratingButtons = [UIButton]()
        let spacing = 5
        let starCount = 5
        
        
        
    //MARK:Initialzation
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            
            let filledStarImage = UIImage(named: "filledStar")
            let emptyStarImage = UIImage(named: "emptyStar")
            
            for _ in 0..<starCount{
                let button = UIButton()
                
                button.setImage(emptyStarImage, forState: .Normal)
                button.setImage(filledStarImage, forState: .Selected)
                button.setImage(filledStarImage, forState: [.Highlighted,.Selected])
                
                button.adjustsImageWhenDisabled = false
                
                button.addTarget(self, action: #selector(ratingButtonTappped(_:)), forControlEvents: .TouchDown)
                ratingButtons += [button]
                addSubview(button)
            }
        }
    
        override func layoutSubviews() {
            //Set the button's width and height to a square the size of the frame's height
            let buttonSize = Int(frame.size.height)
            
            
            var buttonFrame = CGRect(x: 0, y: 0,  buttonSize, height: buttonSize)
            //Offset each button's origin by the length of the button plus spacing
            for (index,button) in ratingButtons.enumerate() {
                buttonFrame.origin.x = CGFloat(index*(buttonSize+spacing))
                button.frame = buttonFrame
            }
            
            updateButtonSelectionStates()
        }
        
        override func intrinsicContentSize() -> CGSize {
            let buttonSize = Int(frame.size.height)
            let width = (buttonSize * starCount) + (spacing * (starCount - 1))
            
            return CGSize( width, height: buttonSize)
        }
        
    //MARK:Button Action
        func ratingButtonTappped(button: UIButton){
            rating = ratingButtons.indexOf(button)! + 1
            
            updateButtonSelectionStates()
        }
        
        func updateButtonSelectionStates() {
            for (index,button) in ratingButtons.enumerate(){
                button.selected = index < rating
            }
        }
    }
    

      

    Define Your Data Model

    刚开始讲了点数据模型,就是之前学的,只不过那个init方法我还没复习,所以有点蒙蔽,后来又开始讲单元测试,我操,我要是早点看到这些,当初强哥让我写测试用例的时候,我也不会跟要死了一样了

    不知道是不是因为我之前研究过单元测试,还是说苹果写的太简单,总之,我感觉好简单就看完了

    我学到的:运行所有单元测试的快捷键:command+u

      

  • 相关阅读:
    「POJ 2699」The Maximum Number of Strong Kings
    「HNOI 2013」切糕
    「PKUSC 2018」真实排名
    「国家集训队 2009」最大收益
    「TJOI2015」线性代数
    「BZOJ 3280」小R的烦恼
    「SDOI 2017」新生舞会
    「六省联考 2017」寿司餐厅
    「TJOI 2013」循环格
    「TJOI 2013」攻击装置
  • 原文地址:https://www.cnblogs.com/chebaodaren/p/5862036.html
Copyright © 2011-2022 走看看