Swift日常开发随笔
1、修改UISearchBar的搜索框底色
使用以下代码:
setSearchFieldBackgroundImage(CommonUseClass._sharedManager.imageFromColor(color: .white, viewSize: CGSize(width: self.bounds.size.width, height: self.bounds.size.height)), for: .normal) //颜色创建图片
func imageFromColor(color: UIColor, viewSize: CGSize) -> UIImage{
let rect: CGRect = CGRect(x: , y: , width: viewSize.width, height: viewSize.height)
UIGraphicsBeginImageContext(rect.size)
let context: CGContext = UIGraphicsGetCurrentContext()!
context.setFillColor(color.cgColor)
context.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsGetCurrentContext()
return image!
}
2、修改UITextField的placeholderLabel的默认字体颜色
inputTextField.text = ""
//备注:因为苹果公司开发过程中使用的是懒加载,所以如果不提前进行设置储值,则不会创建“_placeholderLabel”,仅仅使用以下代码不会进行更改默认字体颜色
inputTextField.setValue(colorWithHexString("0x999999"), forKeyPath: "_placeholderLabel.textColor")
3、为UICollectionView添加headerView
//备注:UICollectionView跟UITableView在设置headerView时有少许的差别。UICollection使用的是一个UICollectionReusableView来进行创建 collectionView.register(UICollectionReusableView, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "UICollectionReusableView") //实现代理方法
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier:"UICollectionReusableView", for: indexPath)
headerView.addSubview(contentSearchBar)
return headerView
} //起初时候使用上面的代理方法不知道为何没有执行,后来设置了以下值发现竟然OK了,也不知道为啥,反正就用了。
layout.headerHeight =
4、自定义轮播图的UIPageControl
//创建轮播视图 class NACustomBannerView: UIView, UIScrollViewDelegate {
var timeInterval: TimeInterval = private var imageUrls: [String] = [String]()
private var imageArray: [UIImageView] = [UIImageView]()
private var tapAction: (Int) -> Void
private var currentIndex: Int =
private weak var timer: Timer? private lazy var scrollNode: UIScrollView = {
let node = UIScrollView()
node.scrollsToTop = false
node.isPagingEnabled = true
node.bounces = false
node.frame = self.bounds
node.delegate = self
node.showsHorizontalScrollIndicator = false
node.decelerationRate = UIScrollView.DecelerationRate(rawValue: )
node.setContentOffset(CGPoint(x: self.frame.width, y: ), animated: false)
node.contentSize = CGSize(width: self.frame.size.width * 3.0, height: )
return node
}() lazy var pageControl: NACustomBannerPageControl = {
let node = NACustomBannerPageControl(frame: CGRect(x: Int(UIScreen.main.bounds.width / - ), y: Int(self.frame.height - ), width: * self.imageUrls.count , height: ))
node.numberOfPages = self.imageUrls.count
return node
}() // MARK: - Public
func resetCurrentPage(_ page: Int) {
currentIndex = page
pageControl.currentPage = page
resetImageView()
startTimer()
} // MARK: - Init
init(frame: CGRect, imageUrls: [String], tapAction action: @escaping(Int) -> Void) {
self.imageUrls = imageUrls
self.tapAction = action
super.init(frame: frame) addImageView()
addSubview(scrollNode)
addSubview(pageControl)
startTimer()
} required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} // MARK: - UIScrollViewDelegate
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let contentOffsetX = scrollView.contentOffset.x
// 设置图片信息
if contentOffsetX == * scrollView.frame.width {// 左滑
currentIndex = getActualCurrentPage(calculatedPage: currentIndex + )
resetImageView()
} else if (contentOffsetX == ) {// 右滑
currentIndex = getActualCurrentPage(calculatedPage: currentIndex - )
resetImageView()
} // 设置 pageControl
if contentOffsetX < scrollView.frame.width && contentOffsetX > {
if contentOffsetX <= scrollView.frame.width * 0.5 {
pageControl.currentPage = getActualCurrentPage(calculatedPage: currentIndex - )
} else if contentOffsetX > scrollView.frame.width * 0.5 {
pageControl.currentPage = getActualCurrentPage(calculatedPage: currentIndex)
}
} else if contentOffsetX > scrollView.frame.width && contentOffsetX < scrollView.frame.width * {
if contentOffsetX >= scrollView.frame.width * 1.5 {
pageControl.currentPage = getActualCurrentPage(calculatedPage: currentIndex + )
} else if contentOffsetX < scrollView.frame.width * 1.5 {
pageControl.currentPage = currentIndex
}
} } func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
scrollView.setContentOffset(CGPoint(x: self.frame.width, y: ), animated: true)
startTimer()
} func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
timer?.invalidate()
timer = nil
} // MARK: - Action
@objc fileprivate func cycleViewDidClick(gesture: UITapGestureRecognizer) {
print("点击了第\(currentIndex)张图")
let imageView = UIImageView(frame: CGRect(x: , y: , width: frame.width, height: frame.height))
imageView.kf.setImage(with: URL(string: imageUrls[currentIndex]))
tapAction(currentIndex)
} @objc fileprivate func autoScroll() {
if imageUrls.count < {
return
}
scrollNode.setContentOffset(CGPoint(x: self.frame.width * , y: ), animated: true)
} func startTimer() {
guard imageUrls.count > else { return } if let myTimer = timer {
myTimer.invalidate()
timer = nil
}
timer = Timer.scheduledTimer(timeInterval: self.timeInterval, target: self, selector: #selector(autoScroll), userInfo: nil, repeats: true)
RunLoop.current.add(timer!, forMode: RunLoop.Mode.common)
} func invalidateTimer() {
timer?.invalidate()
timer = nil
} fileprivate func addImageView() {
var x: CGFloat =
var pageIndex: NSInteger = self.imageUrls.count -
for index in ..< {
let imgNode = UIImageView()
x = CGFloat(index) * frame.width
imgNode.frame = CGRect(x: x, y: , width: frame.width, height: frame.height)
imgNode.kf.setImage(with: URL(string: imageUrls.count == ? "" : (imageUrls[pageIndex])))
imgNode.contentMode = .scaleAspectFill
imgNode.clipsToBounds = true let gesture = UITapGestureRecognizer(target: self, action: #selector(cycleViewDidClick(gesture:)))
imgNode.addGestureRecognizer(gesture)
imgNode.isUserInteractionEnabled = true
imageArray.append(imgNode)
scrollNode.addSubview(imgNode) if imageUrls.count == {
pageIndex =
scrollNode.isScrollEnabled = false
} else {
pageIndex = index == ? :
}
} } fileprivate func resetImageView(){ let preIndex: NSInteger = getActualCurrentPage(calculatedPage: currentIndex - )
let nextIndex: NSInteger = getActualCurrentPage(calculatedPage: currentIndex + ) if imageUrls.count == {
return
} imageArray[].kf.setImage(with: URL(string: imageUrls[preIndex]))
imageArray[].kf.setImage(with: URL(string: imageUrls[currentIndex]))
imageArray[].kf.setImage(with: URL(string: imageUrls[nextIndex])) scrollNode.contentOffset = CGPoint(x: self.frame.width, y: )
} fileprivate func getActualCurrentPage(calculatedPage page: NSInteger) -> NSInteger {
if page == imageUrls.count {
return
} else if page == - {
return imageUrls.count -
} else {
return page
}
}
}
自定义轮播视图
import UIKit class NACustomBannerPageControl: UIView {
let pageControlDiameter: Float =
var currentPage: NSInteger = {
didSet {
if oldValue == currentPage {
return
} if currentPage < oldValue {// 向右拉伸
UIView.animate(withDuration: 0.3, animations: {
for dot in self.subviews {
var dotFrame = dot.frame
if dot.tag == self.currentPage {
dotFrame.size.width = CGFloat(self.pageControlDiameter * 2.0)
dot.backgroundColor = colorWithHexString("0xfdd000")
dot.frame = dotFrame } else if dot.tag <= oldValue && dot.tag > self.currentPage {
dotFrame.origin.x += CGFloat(self.pageControlDiameter)
dotFrame.size.width = CGFloat(self.pageControlDiameter)
dot.backgroundColor = .white
dot.frame = dotFrame
}
}
}) } else {
UIView.animate(withDuration: 0.3, animations: {
for dot in self.subviews {
var dotFrame = dot.frame
if dot.tag == self.currentPage {
dotFrame.size.width = CGFloat(self.pageControlDiameter * 2.0)
dotFrame.origin.x -= CGFloat(self.pageControlDiameter)
dot.backgroundColor = colorWithHexString("0xfdd000")
dot.frame = dotFrame } else if dot.tag > oldValue && dot.tag < self.currentPage {
dotFrame.origin.x -= CGFloat(self.pageControlDiameter)
dot.frame = dotFrame } else if dot.tag == oldValue {
dotFrame.size.width = CGFloat(self.pageControlDiameter)
dot.backgroundColor = .white
dot.frame = dotFrame
}
}
}) } }
}
var numberOfPages: NSInteger = {
didSet {
if self.numberOfPages == {
return
}
if self.subviews.count > {
for view in self.subviews {
view.removeFromSuperview()
}
} var dotX: Float = ;
var dotW: Float = pageControlDiameter;
var bgColor: UIColor
for i in ..<numberOfPages {
if i <= currentPage {
dotX = pageControlDiameter * 2.0 * Float(i)
} else {
dotX = pageControlDiameter * * Float(i) + pageControlDiameter
} if i == currentPage {
dotW = pageControlDiameter * ;
bgColor = colorWithHexString("0xfdd000")
} else {
dotW = pageControlDiameter;
bgColor = .white
} let temp = UIView()
temp.frame = CGRect(x: CGFloat(dotX), y: CGFloat(), width: CGFloat(dotW), height: CGFloat(pageControlDiameter))
temp.layer.cornerRadius = CGFloat(pageControlDiameter * 0.5)
temp.layer.masksToBounds = true
temp.backgroundColor = bgColor
temp.tag = i
addSubview(temp)
} }
} }
自定义UIPageControl样式
func setUpTurnsChangeItem() -> Void {
let x = (SCREEN_WIDTH - )/
let frame = CGRect(x: x, y: CGFloat(), width: , height: )
let urls = ["http://p.lrlz.com/data/upload/mobile/special/s252/s252_05471521705899113.png", "http://p.lrlz.com/data/upload/mobile/special/s303/s303_05442007678060723.png", "http://p.lrlz.com/data/upload/mobile/special/s303/s303_05442007587372591.png", "http://p.lrlz.com/data/upload/mobile/special/s303/s303_05442007388249407.png", "http://p.lrlz.com/data/upload/mobile/special/s303/s303_05442007470310935.png"]
cycleScrollView = NACustomBannerView(frame: frame, imageUrls: urls) { (index) in
print("当前第\(index)张")
}
cycleScrollView.layer.masksToBounds = true
cycleScrollView.layer.cornerRadius = 5.0
container.addSubview(cycleScrollView) }
使用方法
效果图如下:
5、自定义下拉列表
import UIKit class NACustomDropListView: UIView,UITableViewDelegate,UITableViewDataSource{
fileprivate var cellid = "cellid"
lazy var titleArray = [String]()
lazy var tableArray = [[String]]()
var screenWidth = SCREEN_WIDTH
var screenHeight = SCREEN_HEIGHT
var maskViewSS:UIView?
var selectClosure:((_ tag:Int,_ row:Int)->Void)?
init(frame: CGRect,tableArr:[[String]],selectClosure : @escaping (_ tag:Int,_ row:Int)->Void) {
super.init(frame: frame)
self.titleArray = tableArr.map({ (arr) -> String in
return arr[]
})
self.tableArray = tableArr
self.selectClosure = selectClosure
self.backgroundColor = UIColor.white
self.setTitleButton()
setMaskView()
setTableView()
} required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} func setMaskView(){
let height = Int(Int(SCREEN_HEIGHT) - - Int(CommonUseClass._sharedManager.navigationBarHeight()))
maskViewSS = UIView.init(frame: CGRect(x: , y: , width: Int(screenWidth), height:height))
maskViewSS?.backgroundColor = newColorWithAlpha(, , , 0.3)
let tap = UITapGestureRecognizer.init(target: self, action: #selector(tapAction)) maskViewSS?.alpha =
maskViewSS?.addGestureRecognizer(tap) }
@objc func tapAction(){
for i in ..<self.tableArray.count{
let tableView = self.viewWithTag(+i) as! UITableView
let drop = self.viewWithTag(+i) as! NACustomDropListTitleView if tableView.frame.height>{
drop.isSelected = false
UIView.animate(withDuration: 0.2, animations: {
tableView.frame = CGRect.init(x: , y: , width: UIScreen.main.bounds.width, height: )
self.maskViewSS?.alpha =
}, completion: { (idCom) in
self.maskViewSS?.removeFromSuperview()
}) }
}
}
func setTitleButton(){
let totalArry:Array<Array<String>> = self.tableArray
let width:CGFloat = screenWidth / CGFloat(titleArray.count) for i in ..<self.titleArray.count{
let view = NACustomDropListTitleView.init(frame: CGRect.init(x: CGFloat(i)*width, y: , width: width, height: ), title: titleArray[i])
view.tag = +i
view.gesClosure = { (select)->Void in
self.insertSubview(self.maskViewSS!, at: )
UIView.animate(withDuration: 0.2, animations: {
self.maskViewSS?.alpha =
})
if select { for n in ..<self.titleArray.count {
let drop = self.viewWithTag(+n) as! NACustomDropListTitleView
let tableView = self.viewWithTag(+n) as! UITableView
if i == n {
drop.isSelected = true }else{
drop.isSelected = false
}
let arr = totalArry[n] as [String]
// tableView.reloadData() if i == n {
UIView.animate(withDuration: 0.2, animations: {
let height2 = Int(arr.count) * +
let height1 = Int(Int(SCREEN_HEIGHT) - - Int(CommonUseClass._sharedManager.navigationBarHeight())) tableView.frame = CGRect(x: , y: , width: Int(self.screenWidth), height: height2 > height1 ? height1 : height2)
}) }else{
UIView.animate(withDuration: 0.2, animations: {
tableView.frame = CGRect.init(x: , y: , width: self.screenWidth, height: )
})
}
}
}else{ let tableView = self.viewWithTag(+i) as! UITableView UIView.animate(withDuration: 0.2, animations: {
tableView.frame = CGRect.init(x: , y: , width: self.screenWidth, height: )
self.maskViewSS?.alpha =
}, completion: { (idCom) in
self.maskViewSS?.removeFromSuperview()
}) } }
self.addSubview(view) }
}
func setTableView(){
let totalArry:Array<Array<String>> = self.tableArray for i in ..<totalArry.count{ let tableView = UITableView.init(frame: CGRect.init(x: , y: , width: screenWidth, height: ), style: .plain) tableView.delegate = self
tableView.dataSource = self
tableView.tag = +i
tableView.backgroundColor = UIColor.white
tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellid)
tableView.rowHeight =
tableView.isScrollEnabled = false
tableView.separatorStyle = .none
self.addSubview(tableView) }
}
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
var view = super.hitTest(point, with: event)
if view == nil {
for subView in self.subviews {
let tp = subView.convert(point, from: self)
if subView.bounds.contains(tp) {
view = subView
}
}
}
return view
} }
extension NACustomDropListView{
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let drop = self.viewWithTag(tableView.tag-+) as! NACustomDropListTitleView
let cell = tableView.cellForRow(at: indexPath) drop.title = cell?.textLabel?.text
if self.selectClosure != nil {
self.selectClosure!(tableView.tag,indexPath.row)
} drop.isSelected = false
UIView.animate(withDuration: 0.2, animations: {
tableView.frame = CGRect.init(x: , y: , width: self.screenWidth, height: )
self.maskViewSS?.alpha =
}, completion: { (idCom) in
self.maskViewSS?.removeFromSuperview()
}) }
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let drop = self.viewWithTag(tableView.tag-+) as! NACustomDropListTitleView
if drop.isSelected == nil {
return
}else{
return drop.isSelected! ? self.tableArray[tableView.tag-].count :
} }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellid, for: indexPath) as UITableViewCell
cell.textLabel?.font = UIFont.systemFont(ofSize: )
cell.textLabel?.text = tableArray[tableView.tag - ][indexPath.row] return cell
}
}
自定义下拉列表View
import UIKit
import SnapKit
typealias GesClosure = (_ selected:Bool)->Void
class NACustomDropListTitleView: UIView {
var label:UILabel!
var downIcon:UIImageView!
var topIcon:UIImageView! var ly_width:CGFloat?
var title:String?{
didSet{
self.ly_width = CommonUseClass._sharedManager.getStringRect(text: self.title!,font: UIFont.systemFont(ofSize: )).width +
label.text = self.title
if title == "价格"{
centerLayoutConstraints()
}else{
commponLayoutConstraints()
} }
}
var _isSelect:Bool = false
var gesClosure:GesClosure?
var isSelected:Bool?{
didSet{
self._isSelect = isSelected!
if isSelected! {
self.downIcon.image = UIImage.init(named: "ic_down_y")
self.label.textColor = colorWithHexString("0xfdd000")
}else{
self.downIcon.image = UIImage.init(named: "ic_down_f")
self.label.textColor = colorWithHexString("0x000000")
} }
}
init(frame: CGRect,title:String) {
super.init(frame: frame)
self.title = title
self.ly_width = CommonUseClass._sharedManager.getStringRect(text: self.title!,font: UIFont.systemFont(ofSize: )).width +
setUI(title: title)
if title == "价格" {
centerLayoutConstraints()
}else{
commponLayoutConstraints()
} setGes()
} required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setGes(){
let ges = UITapGestureRecognizer.init(target: self, action: #selector(tapAction)) self.addGestureRecognizer(ges)
} @objc func tapAction(){
self._isSelect = !self._isSelect
self.isSelected = self._isSelect
if (self.gesClosure != nil){
self.gesClosure!(self.isSelected!)
} } func setUI(title:String){ label = UILabel()
addSubview(label)
label.font = UIFont.systemFont(ofSize: )
label.textColor = colorWithHexString("0x000000")
label.text = self.title downIcon = UIImageView.init()
downIcon.image = UIImage.init(named:"ic_down_f")
addSubview(downIcon) topIcon = UIImageView.init()
topIcon.image = UIImage.init(named:"ic_down_f")
addSubview(topIcon)
UIView.animate(withDuration: 0.2, animations: {
self.topIcon.transform = CGAffineTransform.init(rotationAngle: CGFloat(Double.pi)) })
} func labelConstraints() -> Void {
label.snp.removeConstraints()
downIcon.snp.removeConstraints()
label.snp.makeConstraints { (make) in
make.centerY.equalTo(self)
make.centerX.equalTo(self)
make.height.equalTo()
make.width.equalTo(ly_width!)
}
}
func commponLayoutConstraints(){
labelConstraints()
downIcon.snp.makeConstraints { (make) in
make.left.equalTo(label.snp.right).offset()
make.centerY.equalTo(label)
make.width.equalTo()
make.height.equalTo() }
} func centerLayoutConstraints() -> Void {
labelConstraints() topIcon.snp.makeConstraints { (make) in
make.left.equalTo(label.snp.right).offset()
make.top.equalTo(label).offset()
make.width.equalTo()
make.height.equalTo()
} downIcon.snp.makeConstraints { (make) in
make.left.equalTo(label.snp.right).offset()
make.bottom.equalTo(label).offset(-)
make.width.equalTo()
make.height.equalTo() } } }
自定义下拉列表titleView
lazy var dropListView : NACustomDropListView = {
let dropListView = NACustomDropListView.init(frame: CGRect(x: CGFloat(), y: , width: SCREEN_WIDTH, height: CGFloat()), tableArr: [moneyArray,limitArray,sortArray], selectClosure: { (tag, row) in
print(tag-,row)
})
return dropListView
}() view.addSubview(dropListView)
使用方法
运行效果:
提示:之所以为空白,是因为我把下拉列表中的tableView.reloadData()这行代码屏蔽掉了,加入的数组没有刷新。
6、隐藏navigationBar和tabbar的黑色分割线
//隐藏navigationBar下面的分割线
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
self.navigationController?.navigationBar.shadowImage = UIImage() //隐藏tabbar上面的分割线
self.tabBarController?.tabBar.shadowImage = UIImage.init()
self.tabBarController?.tabBar.backgroundImage = UIImage.init()
7、获取导航栏+状态栏的高度
func navigationBarHeight() -> Float {
var navigationBarH: Float =
if IS_IPHONE_X.boolValue {
navigationBarH +=
}else{
navigationBarH +=
}
return navigationBarH
}
8、判断字符串是否为空
func StringIsEmpty(value: AnyObject?) -> Bool {
if (nil == value) {
return true
}else{
if let myValue = value as? String{
return myValue == "" || myValue == "(null)" || == myValue.count
}else{
return true
}
}
}
9、判断是否是整数
func isPurnInt(string: String) -> Bool {
let scan: Scanner = Scanner(string: string)
var val:Int =
return scan.scanInt(&val) && scan.isAtEnd
}
10、添加阴影效果
func setShadow(view:UIView,sColor:UIColor,offset:CGSize,
opacity:Float,radius:CGFloat) {
view.layer.shadowColor = sColor.cgColor
view.layer.shadowOpacity = opacity
view.layer.shadowRadius = radius
view.layer.shadowOffset = offset
} 使用实例:setShadow(view: groundView, sColor: .black, offset: CGSize(width: 1, height: 1), opacity:0.15, radius: 5)
11、颜色创建图片
func imageFromColor(color: UIColor, viewSize: CGSize) -> UIImage{
let rect: CGRect = CGRect(x: , y: , width: viewSize.width, height: viewSize.height)
UIGraphicsBeginImageContext(rect.size)
let context: CGContext = UIGraphicsGetCurrentContext()!
context.setFillColor(color.cgColor)
context.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsGetCurrentContext()
return image!
}
12、获取字符串的宽度、高度
func getStringRect(text:String, font:UIFont) -> CGRect {
let strText: NSString = NSString( string: text )
let size:CGSize = CGSize(width: , height: )
let options:NSStringDrawingOptions = NSStringDrawingOptions.usesLineFragmentOrigin
let boundRect = strText.boundingRect(with: size, options: options, attributes: [NSAttributedString.Key.font: font], context: nil)
return boundRect
}
所用代码:均是swift 4.2下运行
Swift日常开发随笔的更多相关文章
- 日常开发使用SVN命令
现在把我日常开发中用到的svn命令总结出来,做个备忘,其实真正用到也就那几个. 如果遇到参数不知道使用或其它困难请使用:svn --help 得到帮助 1)检出: svn co svn地址 本地路径 ...
- 从日常开发说起,浅谈HTTP协议是做什么的。
引言 HTTP协议作为Web开发的基础一直被大多数人所熟知,不过相信有很多人只知其一不知其二.比如咱们经常用到的session会话机制是如何实现的,可能很多人都说不出来吧.其实session会话就是H ...
- ios开发——实用技术总结Swift篇&swift常用开发技术总结
swift常用开发技术总结 懒加载:属性,数组(字典),控件... 数组(懒加载): lazy var shops:Array<Dictionary<String, String>& ...
- Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课
Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课 本课程采用Q Q群直播方式进行直播,价值99元视频课程免费直播.完整的基于Swift项目实战,手把手教你做一个Swift版i ...
- Swift UI开发初探
今天凌晨Apple刚刚发布了Swift编程语言,Swift是供iOS和OS X应用编程的新编程语言.相信很多开发者都在学习这门新语言. 废话不多说,下面我就来学习使用Swift创建一个简单的UI应用程 ...
- 开发随笔——NOT IN vs NOT EXISTS
原文:开发随笔--NOT IN vs NOT EXISTS 原文出处: http://blog.csdn.net/dba_huangzj/article/details/31374037 转载请引用 ...
- Swift游戏开发实战教程(霸内部信息大学)
Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程具体解说记忆配对 ...
- Apple Swift中英文开发资源
Apple Swift中英文开发资源集锦[apple swift resources] 找到的一些Apple Swift中英文资源原文链接,希望对大家有所帮助.欢迎大家补充,原始资源链接最好! The ...
- Android &Swift iOS开发:语言与框架对比
转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...
随机推荐
- 安装mysql最后一步未响应,卡死。(解决方法mySql5.5,以及安装教程)
安装教程:http://www.server110.com/mysql/201308/784.html 重装mysql的时候,总是在提交配置后的最后一步,安装失败,进程管理器里显示程序无响应,mysq ...
- 转载hiberinate的懒加载
Hibernate的强大之处之一是懒加载功能,可以有效的降低数据库访问次数和内存使用量.但用的不好就会出现org.hibernate.LazyInitializationException. 这个异常 ...
- sevlet实现反盗链
有时候为了网站的版权和安全问题,我们需要为我们的网站应用设置防盗链,这样可以保证我们网站的一些资源的安全性.防盗链的主要是通过获取http的请求头referer的信息来和我们的网站地址做对比,如果相同 ...
- requests设置Authorization
headers = {"Authorization", "Bearer {}".format(token_string)} r = requests.get(& ...
- Python中的Numpy
引用Numpy import numpy as np 生成随机数据 # 200支股票 stock_cnt = 200 # 504个交易日 view_days = 504 # 生成服从正态分布:均值期望 ...
- windows通过ssh连接虚拟机中的ubuntu步骤
linux端开启ssh服务 1.安装openssh-server包 sudo apt-get install openssh-server 2.启动ssh server sudo /etc/init. ...
- ssm框架集成Quartz定时器
第一步:添加依赖 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>qu ...
- 纯css,div隐藏滚动条,保留鼠标滚动效果。
示例1: html,body { height: 100%; } body { overflow: hidden; } .full-screen { position: relative; width ...
- Spark2.0 Pipelines
MLlib中众多机器学习算法API在单一管道或工作流中更容易相互结合起来使用.管道的思想主要是受到scikit-learn库的启发. ML API使用Spark SQL中的DataFrame作为机器学 ...
- debian flam3 源码
https://packages.debian.org/source/jessie/flam3 Source Package: flam3 (3.0.1-3) Links for flam3 Debi ...