// 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)
}
闭包的写法,尾随闭包的几种写法
弄清继承关系
弄清子类特有的,就、以及哪些是父类的。
网友评论