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日常开发随笔的更多相关文章

  1. 日常开发使用SVN命令

    现在把我日常开发中用到的svn命令总结出来,做个备忘,其实真正用到也就那几个. 如果遇到参数不知道使用或其它困难请使用:svn --help 得到帮助 1)检出: svn co svn地址 本地路径 ...

  2. 从日常开发说起,浅谈HTTP协议是做什么的。

    引言 HTTP协议作为Web开发的基础一直被大多数人所熟知,不过相信有很多人只知其一不知其二.比如咱们经常用到的session会话机制是如何实现的,可能很多人都说不出来吧.其实session会话就是H ...

  3. ios开发——实用技术总结Swift篇&swift常用开发技术总结

    swift常用开发技术总结 懒加载:属性,数组(字典),控件... 数组(懒加载): lazy var shops:Array<Dictionary<String, String>& ...

  4. Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课

    Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课 本课程采用Q Q群直播方式进行直播,价值99元视频课程免费直播.完整的基于Swift项目实战,手把手教你做一个Swift版i ...

  5. Swift UI开发初探

    今天凌晨Apple刚刚发布了Swift编程语言,Swift是供iOS和OS X应用编程的新编程语言.相信很多开发者都在学习这门新语言. 废话不多说,下面我就来学习使用Swift创建一个简单的UI应用程 ...

  6. 开发随笔——NOT IN vs NOT EXISTS

    原文:开发随笔--NOT IN vs NOT EXISTS 原文出处: http://blog.csdn.net/dba_huangzj/article/details/31374037  转载请引用 ...

  7. Swift游戏开发实战教程(霸内部信息大学)

    Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程具体解说记忆配对 ...

  8. Apple Swift中英文开发资源

    Apple Swift中英文开发资源集锦[apple swift resources] 找到的一些Apple Swift中英文资源原文链接,希望对大家有所帮助.欢迎大家补充,原始资源链接最好! The ...

  9. Android &Swift iOS开发:语言与框架对比

    转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...

随机推荐

  1. 170420、maven内置常量

    Maven工程插件配置中通常会用到一些Maven变量,因此需要找个地方对这些变量进行统一定义,下面介绍如何定义自定义变量. 在根节点project下增加properties节点,所有自定义变量均可以定 ...

  2. 160526、高并发之LVS搭建负载均衡

    LVS介绍: LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器.它是我们国家的章文嵩博士的一个开源项目.在linux内核2.6中,它已经成为内核的一部分,在此之前的内 ...

  3. 启动phpstyle Apache的80端口被win7的System PID=4的进程占用的解决方法 以及 如何在phpStyle里发布程序

    学习前端是,用到Ajax,php语言,操作mysql数据库,浏览器无法解析php代码(把源码输出):原因,我之前用的是tomcat服务器写jsp,servlet,php用的是apache服务器,没有配 ...

  4. Android ImageView 获取图片信息后进行比较

    ImageView a=(ImageView)findViewById(R.id.imageView2); //获取当前图片ConstantState类对象 Drawable.ConstantStat ...

  5. Oracle分配内存的基本单位:Granule(粒度)

    在9i后,SGA的内部组件大小可以动态调整,也可以由数据库自动管理,在设置内存大小的时候,分配的基本单位是粒度(granule) granule是一段连续的虚拟内存,大小区域决SGA_MAX_SIZE ...

  6. 设计模式之——迭代器模式

    设计模式是开发者前辈们给我们后背的一个经验总结.有效的使用设计模式,能够帮助我们编写可复用的类.所谓"可复用",就是指将类实现为一个组件,当一个组件发生改变时,不需要对其他组件进行 ...

  7. JUnit4.12 源码分析之Statement

    1. Statement 抽象类Statement作为命令模式的Command,只有一个方法 各种Runner作为命令模式中的Invoker,将发出各种Statement,来表示它们运行JUnit测试 ...

  8. 剑指Offer——两个链表的第一个公共结点

    题目描述: 输入两个链表,找出它们的第一个公共结点. 分析: 设置两个指针,分别从两个链表的头部开始往后遍历. 谁遍历完自己本身的,就从另一个链表开始遍历,这样大家到达第一个公共结点的时候便会相遇. ...

  9. git学习——<四>git版本管理

    一.git版本管理的优势 都说git比svn强大,强大在哪呢? 首先,从部署上说:svn.cvs都是集中式的,一台服务器上部署服务,所有客户端编写的代码都要提交到该服务器上.git是分布式的,所有人都 ...

  10. golang zlib 压缩,解压缩

    package main import ( "bytes" "compress/zlib" "fmt" "io" &qu ...