备忘录集合

//        func touchesBegan(touches: Set<UITouch>, withEvent: UIEvent?) {
//            if self.target == nil {
//                return
//            }

像重写方法这种 把这个方法写在另外一个方法里就会没有重写

写代码的时候注意层级关系



    func addTarget(target:AnyObject?,action: Selector){
        self.target = target
        self.action = action
    }
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        if self.target == nil {
            
            return
        }
        
        //判断self.target是否实现了指定的方法
        if self.target!.respondsToSelector(self.action!) {
            
        self.target?.performSelector(self.action!, withObject: self)
            
            
        }else{
        
            print("按钮点击对应的方法没有实现")
        }
        
        
        
    }



懒加载
 

    lazy var imageArray: [UIImage] = {

            var tempArray = [UIImage]()

        for item in 1...15 {

            

            let image = UIImage.init(named: "32_\(item).jpg")

            tempArray.append(image!)

        }

        return tempArray

    }()



func btnAction(btn:YTButton) {
        
        let detail = DetailViewController()
        //传值
        detail.imageArray = self.imageArray
        
        //!!!在详情页隐藏底部的标签栏
        detail.hidesBottomBarWhenPushed = true
        
        //跳转
        self.navigationController?.pushViewController(detail, animated: true)
        
    }

类前面加static  要用类名才能调用 (类型方法)

 let str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

        let c = str.characters[str.startIndex.advancedBy(section)]



tabBarItems 和 tabBar.Items

 //显示箭头

            cell?.accessoryType = .DisclosureIndicator




    //1.图片上的按钮被点击
    func deleteAction() {
        print("删除!!!!!")
        //将当前图片按钮从界面上移除
        self.removeFromSuperview()
        //发送消息通知视图控制器刷新界面
        NSNotificationCenter.defaultCenter().postNotificationName("reloadView", object: nil)
    }

    //注册成为观察者
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadView", name: "reloadView", object: nil)
return 没写在最后  return后面的代码会执行



 //定制navigationBar

        //1.设置背景颜色

        self.navigationBar.barTintColor = UIColor.blackColor()

        

        //2.设置中间的文字颜色

        //NSForegroundColorAttributeName 文字颜色的key

        self.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]

        

        //3.设置填充颜色

        self.navigationBar.tintColor = UIColor.whiteColor()



 //设置状态栏的颜色为白色
        UIApplication.sharedApplication().statusBarStyle = .LightContent



//        设置背景图片
//        以图片路径的方式获取图片
        bgImgView =  UIImageView.init(frame: self.view.bounds)
        bgImgView.image = UIImage.init(contentsOfFile: NSBundle.mainBundle().pathForResource(bgImgName, ofType: nil)!)





//        设置中间segement
        let segement = UISegmentedControl.init(items: ["消息","电话"])
        segement.frame = CGRectMake(0, 0, 100, 40)
        segement.selectedSegmentIndex = 0
//        设置segement边框颜色
        segement.layer.borderColor = UIColor.whiteColor().CGColor
        segement.layer.borderWidth = 1
//        设置segement背景颜色
//        segement.backgroundColor = UIColor.whiteColor()
        segement.tintColor = UIColor.whiteColor()
        
        
        self.navigationItem.titleView = segement



按钮切圆

 //切圆
        self.centerBtn.layer.masksToBounds = true
        self.centerBtn.layer.cornerRadius = 50



textField的左右视图

let leftImageView1 = UIImageView.init(frame: CGRectMake(0, 0, 40, 50))
        leftImageView1.contentMode = .Center
        leftImageView1.image = UIImage.init(named: "user")
        userField.leftView = leftImageView1
        userField.leftViewMode = .Always
        self.bgView.addSubview(userField)
        userField.delegate = self



 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
//        self.outHandAnimation()
        self.view.endEditing(true)
    }


//MARK: - 监听键盘的弹起和收起
extension LoginViewController{
    
    func addObserverAction() {
        
        //当键盘弹起和收起的时候,系统会自动通过消息中心去发送相应的消息。
        //UIKeyboardWillShowNotification -> 键盘将要弹起对应的消息名
        //UIKeyboardWillHideNotification -> 键盘将要收起对应的消息名
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "showKeyBoard:", name: UIKeyboardWillShowNotification, object: nil)
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "hideKeyBoard:", name: UIKeyboardWillHideNotification, object: nil)
    }
    
    //键盘弹起
    func showKeyBoard(nof:NSNotification){
        
        
        UIView.animateWithDuration(0.4) {
            
            self.bgView.transform = CGAffineTransformMakeTranslation(0, -110)
        }
        
    }
    
    //键盘收起
    func hideKeyBoard(nof:NSNotification) {
        
        UIView.animateWithDuration(0.4) {
            
            self.bgView.transform = CGAffineTransformMakeTranslation(0, 0)
        }
        
    }



 
        let story = UIStoryboard.init(name: "Register", bundle: nil)
        let register = story.instantiateInitialViewController()
        self.navigationController?.pushViewController(register!, animated: true)


讯飞语音开放平台







 //self.imgView = UIImageView.init(image: UIImage.init(data: (data?.picData)!))

           self.imgView.image = UIImage.init(data: (data?.picData)!)//将不是YTTabBar的从系统的tabBar上移除

            item.removeFromSuperview()



App Transport Security Settings



 //获取最外层的字典
            let json = data.result.value
            
            //获取articles对应的数组
             let tarray = json?.objectForKey("articles”)



 //耗时操作执行完成后将子线程取消
        NSThread.currentThread().cancel()



  //- 方式3:隐式的创建一个子线程
    func creatThread3() {
        //1.创建一个后台线程(子线程),创建好之后会自动启动
        self.performSelectorInBackground("longTimeOperation", withObject: nil)
    }

//!!!图片下载完成后回到主线程去展示图片
        //参数1:指定的方法
        //参数2:指定的线程
        //参数3:方法中的实参
        //参数4:是否等待指定的方法执行完成
        //功能:在指定的线程中调用指定的方法
        self.performSelector("showImage:", onThread: NSThread.mainThread(), withObject: image, waitUntilDone: false)



//MARK: - 两个概念:
//1.任务: 想要执行的操作(想要做的事情)
//2.队列: 用来存储任务的容器(先进先出)

//GCD的使用步骤:
//1.创建队列(需要确定队列的类型)
//2.创建任务,并且将任务添加到队列中.(确定任务的执行方式)
//GCD会自动将任务从队列中取出,放到对应的线程中去执行

//MARK: - 四个术语
//任务的执行方式:
//1.同步:在当前线程中执行(不会去创建新的线程),需要马上执行任务
//2.异步:在另外一个线程中执行(会创建新的线程)

//队列的类型:
//1.并发:队列中的任务可以同时执行(前提是能有多个线程)
//2.串行:队列中的任务一个一个顺序执行

//在swift中使用OC的第三方库
//1.将第三方库的文件拖到工程中
//2.创建桥接文件
//a.通过新建文件创建一个.h文件,命名规范:XXX-Briding-Header
//b.在桥接文件中将需要使用的头文件通过"#import"包含进去
//c.设置工程文件



SDWebImage的使用  //通过SDWebImage做图片的异步下载和缓存

        //参数1:图片的网路路径对应的url

        //参数2:占位图

        //cell.iconImageView.setImageWithURL(NSURL.init(string: model.icon), placeholderImage: UIImage.init(named: "user_default"))

        cell.iconImageView.sd_setImageWithURL(NSURL.init(string: model.icon), placeholderImage: UIImage.init(named: "user_default"))
<key>NSAppTransportSecurity</key>

<dict>

<key>NSAllowsArbitraryLoads</key>

<true/>

</dict>



NSFileManager这个类



do { } catch { } 捕获异常

caemitterlayer类

判断一个类的对象判断,,,可以通过它的属性判断,,还可以给它添加其它的属性用来区分如tag值





请求网络数据提问

注意我们创建connection和session会话都是调用的方法创建的而不是直接初始化

1.NSURLConnetion方式请求数据(ios9已经被废除)(只是简单介绍了下没有涉及get 。post等传参数问题)

直接用这个类的方法而不是用对象的方法?用的方法的名称是什么?带了几个参数?最后一个参数中闭包有哪几个参数?如何将二进制数据解析成json数据,调用的是那个类的什么方法而不是对象的方法?

2.NSURLSession.sharedSession()这个方法快速创建的是默认的会话?还有一个方法创建默认会话模式 哪个方法?请求对象任务的执行语句?

创建POST请求对象是用的哪个类?NSMutableURLRequest.init(URL: url!)

//b.将字符串转换成二进制
        let sendData = sendStr.dataUsingEncoding(NSUTF8StringEncoding)



//3.根据会话模式创建session(创建默认会话模式的session)
        //let session = NSURLSession.init(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
        //快速创建一个默认会话模式的session
        let session = NSURLSession.sharedSession()


  
        //!!!图片下载完成后回到主线程去展示图片
        //参数1:指定的方法
        //参数2:指定的线程
        //参数3:方法中的实参
        //参数4:是否等待指定的方法执行完成
        //功能:在指定的线程中调用指定的方法
        self.performSelector("showImage:", onThread: NSThread.mainThread(), withObject: image, waitUntilDone: false)



单例的创建方式



import UIKit

class ValueManager: NSObject {
    
//    保证当前这个类只能创建出一个对象,而且这个对象必须defalutManager去拿到
//    拿到当前这个类唯一的对象
    static let defalutManager = ValueManager()
    
//    构造方法私有化
    private override init() {
        
    }
    
//    2.声明一个属性的类型是需要传的值的类型
    var sendValue = ""
}



 //self.imgView = UIImageView.init(image: UIImage.init(data: (data?.picData)!))

           self.imgView.image = UIImage.init(data: (data?.picData)!)//将不是YTTabBar的从系统的tabBar上移除

            item.removeFromSuperview()
 

        //设置每个cell之间的最小间距(行间距和列间距)

        layout.minimumInteritemSpacing = 0

        layout.minimumLineSpacing = 0 //设置这个属性就是直接设置了每一行cell之间的间距



tableView   collectionView 设置cell,foot,header一般是在创建这三个对象的时候就就改变frame和内容



UITableViewCell中有两个header  1.是textLabel    2.detailTextLabel

 //5.
    func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? {
        return ["A","B","C","D","E"]
    }

 
 //数据源数组
    lazy var dataArray: [NSDictionary] = {
       
        var tempArray = [NSDictionary]()
        
        //1.获取plist文件的路径
        let path = NSBundle.mainBundle().pathForResource("data2.plist", ofType: nil)
        //2.拿到plist文件最外层的数组
        //将plist文件转换成OC的数组(前提是plist的最外层是数组)
        //参数:plist文件的路径
        let plistArray = NSArray.init(contentsOfFile: path!)
        
        return tempArray
    }()


//CGSizeMake(1000,100)是最大值
let nameSize = nameStr.boundingRectWithSize(CGSizeMake(1000,100),options: .USesLineFramentOrigin,attributes:[NSFontAttributeName: UIFont.systemFontOfSize(13)],context:nil).size



  //设置title和image

        for (i,value) in self.tabBar.items!.enumerate() {

            value.title = titleArray[i]

            //item字体相关,字体是一个title一个tile设置的要用循环拿到每个title

            value.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.lightGrayColor(),NSFontAttributeName: UIFont.systemFontOfSize(15)], forState: .Normal)

            在tabBar中设置title字体

            value.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFontOfSize(15), NSForegroundColorAttributeName:UIColor.orangeColor()],forState: .Selected)

        }

然而在navigationBar中设置title是

 self.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]



 item.image = UIImage.init(named: imageName[i])?.imageWithRenderingMode(.AlwaysOriginal)

            item.selectedImage = UIImage.init(named: imageName[i] + "_1")?.imageWithRenderingMode(.AlwaysOriginal)





 //第一次点击放大,第二次点击缩小
        if self.imageView.frame.size.width == 200 {
            
            self.imageView.frame = self.view.bounds
            
        }else{
        
            self.imageView.frame = CGRectMake(0, 0, 200, 200)
            self.imageView.center = self.view.center
        }


self.center  = (touches.first?.locationInView(self.superview))!

  override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

//      停止UIView动画
        
        self.imagView.layer.removeAllAnimations()
//        让形变清空
        self.imagView.transform = CGAffineTransformIdentity
    }

 self.tabBar.translucent = false



 //2.设置中间的文字颜色
        //NSForegroundColorAttributeName 文字颜色的key
        self.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]







        
//        需要显示在Label上的文字
        let str = "有的防护服的发挥份发动机减肥哈将对方尴尬发动 "
       
//        计算显示指定文字所需要的最小空间
//        1.将swift的字符串转换成oc的字符串
        let ocStr = str as NSString
//        2.计算字符串大小
//        参数1:限制显示当前字符串当前字符串的最大宽度和最大高度
//        参数2:设置渲染方式
//             (UsesLineFragmentOrigin)
//        参数3:确定文字的字体(大小)
//        NSFontAttributeName -> 字体对应的Key值
//        NSForegrouundColorAttributeName -> 文字颜色对应的Key值
    let strSize = ocStr.boundingRectWithSize(CGSizeMake(200, 100000), options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(17)], context: nil).size
        print(strSize)
        
        
//        创建label显示文字
        let label = UILabel.init(frame: CGRectMake(100, 100, strSize.width, strSize.height))
        label.backgroundColor = UIColor.yellowColor()
        self.view.addSubview(label)
        label.text = str
//        自动换行
        label.numberOfLines = 0  //必须要自动换行,不然会一行显示
    }

     board = [[PointState]](count: 15, repeatedValue: [PointState](count: 15, repeatedValue: .Space))







//
//  TapViewController.swift
//  02-手势集合
//
//  Created by 千锋1 on 16/9/2.
//  Copyright © 2016年 1000phone. All rights reserved.
//

import UIKit

class TapViewController: YTViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

//        1.创建点击手势对象
//        UIGestureRecongnizer是所有手势的父类
//        参数1.调用方法的对象
//        参数2.方法对应的选择器 -> 这个方法如果带参只能带一个参数,参数的对象就是当前创建的点击手势对象
//        点击手势发生的时候让参数1调用参数2中的方法
    
        let tap = UITapGestureRecognizer.init(target: self, action: "tapActon:")
        
        //核心属性:点击次数(默认是1->单击)
        tap.numberOfTapsRequired = 2
        
//        2.将点击手势添加到视图上(要求:添加手势的视图必须可以进行用户交互)
        self.view.addGestureRecognizer(tap)
        
//        3.打开图片的用户交互,并添加点击手势
//        注意:同一个手势对象,只能被添加到一个视图
        self.imagView.addGestureRecognizer(tap)
    }
    
    
    
    
    func tapAction(tap:UITapGestureRecognizer) {
        
        print("点击")
        
        if self.imagView.frame.size.width == 200 {
            self.imagView.frame = self.view.bounds
    
        }
        else {
            self.imagView.frame = CGRectMake(0, 0, 200, 200)
            self.imagView.center = self.view.center
        }
    }

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


// 将数据保存到手机硬盘中 -> 数据本地化

// ios中的数据本地化

// 1.文件操作(NSFileManager和NSFileHandle)

// 2.plist文件(NSUserDefaults)

// 3.数据库

// 4.归档和解归档

// ios应用程序中的本地路径 -> 沙盒路径
// 苹果手机安装的每个应用程序都有一个专门的内存空间用来存储当前应用程序中产生的本地数据 ,这个内容空间就是沙盒。每个应用程序对应的沙盒是独立的,相互不影响,而且相互不能访问。



 // =============沙盒===============
        //!!!面试常问
        // 1.拿到沙盒路径
        // 如果应用程序是在真机上,拿到的就是真机的沙盒目录,如果是在模拟器上可以拿到模拟器对应的沙盒目录
        // a.Documents:存到这个目录下的数据除非讲应用程序卸载,否则里面的数据会自动销毁
        let documentPath = NSHomeDirectory() + "/Douments"
        // b.Library:在程序更新的时候,数据会自动被删除
        // Caches:专门用来存储缓存数据 在清除缓存的时候就将这个文件夹的内容删除
        let cachesPath = NSHomeDirectory() + "/Library/Caches"
        // Preferences:(偏好设置)专门用来存储设置性的数据
        let prefencesPath = NSHomeDirectory() + "/Library/Preferences"
        // temp:存到这个目录下的数据在程序结束后会自动销毁
        let temp = NSHomeDirectory() + "/temp"
        print(NSHomeDirectory())



command + shirft+ g

显示隐藏文件

iTunes在与iPhone同步时,备份所有的Documents和Library文件。
iPhone在重启时,会丢弃所有的tmp文件。


查看方法:
方法1、可以设置显示隐藏文件,然后在Finder下直接打开。设置查看隐藏文件的方法如下:打开终端,输入命名
(1)显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
(2)隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
(3)输完单击Enter键,退出终端,重新启动Finder就可以了 重启Finder:鼠标单击窗口左上角的苹果标志-->强制退出-->Finder-->
现在能看到资源库文件夹了。 
打开资源库后找到/Application Support/iPhone Simulator/文件夹。这里面就是模拟器的各个程序的沙盒目录了。
方法2、这种方法更方便,在Finder上点->前往->前往文件夹,输入/Users/username/Library/Application Support/iPhone Simulator/  前往。
username这里写用户名。



 //1.设置是否透明
        self.tabBar.translucent = false

    self.view.window?.rootViewController = YTTabBarController()



 let item2 = UIBarButtonItem.init(image: UIImage.init(named: "itemImage")?.imageWithRenderingMode(.AlwaysOriginal), style: .Plain, target: self, action: "itemAction:")



//2.隐藏系统自带的返回按钮
        self.navigationItem.hidesBackButton = true





 let space1 = UIBarButtonItem.init(barButtonSystemItem: .FlexibleSpace, target: nil, action: "")
        //b.FixedSpace(相当于空格,用来设置每个item之间的间距,间距需要手动设置)
        let space2 = UIBarButtonItem.init(barButtonSystemItem: .FixedSpace, target: nil, action: "")
        //设置间距
        space2.width = 20
        
        
        //将item添加到toolBar上
        self.toolbarItems = [space2,item1,space2,item2,space2,item3,space2,item4,space2]



 //MARK:-警告框
    
    func showAlert(text: String,action:((UIAlertAction)-> Void)?) {
        
        //创建警告框
        let alert = UIAlertController.init(title: nil, message: text, preferredStyle: .Alert)
        //添加action
        let action = UIAlertAction.init(title: "确定", style: .Default,handler: action)
        alert.addAction(action)
        self.presentViewController(alert, animated: true, completion: nil)
        
    }
闭包的写法,尾随闭包的几种写法

弄清继承关系
弄清子类特有的,就、以及哪些是父类的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容