app太大了 swift

2016-08-15 10:20:40 yilovexing 阅读数 2639

转载声明:http://www.jianshu.com/p/46bc8cf37cae


本篇文章包含了开发一个App及发布的大部分内容,有了本篇文章,大家再也不用东奔西跑的去找资料了,这里面有开发App的完整资料及如何建立一个属于自己的框架,这篇文章主要针对初学者,如果有写的不好的地方,大家可以指出,希望和大家共同进步。 

先谈下我对App的理解,无非就是发出数据请求,获取后台传来的数据,然后体现在界面上。这样也就是说我们我发送网络的get或者是post请求,然后就是获取到了数据,一般获取到的数据有三种形式:1.json格式(其实在我眼里就只有这一种) 2.xml格式 3.字符串形式。获得数据之后就是解析数据了,swift对于解析json数据也是非常简单的,对于解析出来的数据,一般有两种处理方式:1.使用本地数据持久化方式(通俗讲也就是将数据存起来,存到手机上)。2.直接将数据显示到界面上(不推荐,简单的也可以这么做啦)。在我眼里,说白了,开发一个App其实就是在做上面重复的事情。下面就来详细的讲下如何来搭建属于自己的框架。本篇是基于Xcode6.2,其实思路一样

对于初学者来说,一般的网络请求,json数据简析这些使用开源框架就可以了

第一步.网络请求框架 这里使用的是YYHRequest-Swift这个开源框架。下载地址:https://github.com/yayuhh/YYHRequest-Swift大家可以自行去下载。有了框架,申请数据就方便多了。简单的get,post方式申请数据:

1.get方式(data是数据,对其处理就好了)


let request = YYHRequest(url: NSURL(string: "http://www.google.com/"))

request.loadWithCompletion {response, data, error in

if let actualError = error {

// handle error

} else if let actualResponse = response {

// handle success

}

}


2.post方式:


let request = YYHRequest(url: NSURL(string: "http://www.google.com/"))

request.method = "POST"

request.parameters["foo"] = "bar"

request.completionHandler = { response, data, error in

// request complete!

}

request.loadRequest()


这样申请网络数据就完成了,接下来就是解析数据了。

第二步.json数据解析框架 。SwiftyJSON这是一个使用极其普遍的开源框架,下载地址:https://github.com/lingoer/SwiftyJSON大家可以自行去下载,使用的话外面的文章实在是太多了,我就推荐一篇大家去看就OK了http://www.jianshu.com/p/ae9a579905e0这里面已经写出了使用方法,大家可以跟着里面的例子进行测试。

在这里插一下版本更新,苹果公司是不允许直接更新app的,需要跳转到App Store去自行下载,做出版本更新的思路就是:自己服务器上放含有最新版本号的json数据,通过网络请求获取json数据,解析json数据获得最新版本号,与目前的版本号进行对比,判断是否跳出提示更新的框,是的话就跳转到App Store地址,因为自己写篇幅就过长了,这里也给出参考的文章,在这里感谢曾给过帮助的朋友们!参考地址:http://www.jianshu.com/p/6f22f06261f5

上面两个框架就可以解决很多问题了,下面当然要讲下怎么导入上面这两个框架了,这里就简述了,新建一个工程,比如Helloworld,然后将YYHRequest-Swift,SwiftyJSON中的.xcodeproj文件拉到项目中去,然后点击自己的项目,这里是Helloworld,然后点击General,然后往下拉,看到Embedded Binaries 下面有个加号,将这两个框架添加进来就行了

第二种导入框架的方法,就是使用cocoapods,有篇文章写得非常好,这里推荐下http://www.jianshu.com/p/1f93e0fec8a5

到这里就认为是框架导入成功了。

第三步.界面的搭建,相信大家对基本的控件的使用应该没什么问题吧,如果有问题的话,推荐去下载IOS开发指南这本书的源码,然后怎么去对应上内容,怎么获取PDF大家自己想办法喽,源码下载地址:http://www.51work6.com/forum.php?mod=viewthread&tid=1159&extra=page%3D1这里面拥有所有基本控件简单使用源码,只要合理利用,会有相当大的作用的。

第四步,数据持久化。这里推荐http://www.jianshu.com/p/7616cbd72845其实在刚才推荐的下载的源码的第十一章ch11中讲的非常清楚,Demo代码也非常适用。目前我用的就是修改Demo代码中的。

还有很中要的一点就是界面布局,这点非常重要。因为现在iphone的屏幕尺寸种类多了,目前还是推荐使用自动布局Auto Layout来对界面布局推荐一个非常好的学习地址,相信看完这篇文章,布局是一点问题都不会有了,写得非常详细https://lvwenhan.com/ios/430.html相信大家会有很大收获的。

经过上面这些,框架基本是搭建起来了,下面就介绍一些开发一个App不可避免要用到的一些东西

1.IOS(swift)-scrollView(tableView) ·下拉刷新上拉加载

http://www.jianshu.com/p/94b6d7287faf

2.动态启动界面(有需要时用)

http://fromwiz.com/share/s/0i4C850y0AUf2VM_1t15ktzt2XPmI93U7QMr2rF2y40mYXtX

3.纯代码写的tab bar

http://www.jianshu.com/p/a9808d63408b

4.app的引导页

http://www.jianshu.com/p/024dd2d6e6e6

5.自定义tab bar 并带有动画

http://www.jianshu.com/p/d487a87105e7

6.使用ShareSDK完成第三方分享功能

http://www.jianshu.com/p/f95080d109a6

TableView是一个非常重要,比其他基本控件要复杂一点的控件,在上面下载的源码的第六章完整的介绍了基本用法。

最后就只剩下App的发布了,之前我写过一篇关于此类的文章,请大家移步http://www.jianshu.com/p/2813abee7187

如果有写的不对的地方,还请指出,我会及时修改。写得不好的地方还请大家见谅,需要大家的支持。



文/Jerry沈(简书作者)
原文链接:http://www.jianshu.com/p/46bc8cf37cae
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。



2014-10-20 09:42:02 superyan 阅读数 7273

昨天,缘创派的新版本app终于审核通过。这个版本是用swift开发的一个版本,几乎是在appstore允许提交swift程序的第一天我们就提交了。只是等待审核的时间超过两周。


回想起来,当时听到苹果推出来新的编程语言的时候,我们立刻决定采用swift来开发我们的app。原因很简单:第一、技术合伙人之前从来没有学过Object C,从来没有开发过iOS的应用。第二、我们之前的app是外包的,很多需求没有办法跟进。


最初觉得使用swift的时候,其实抱着一种试一试的态度。毕竟这个语言和开发工具都处在beta阶段。


当然,根本没有书,只能查看技术文档。好在技术合伙人的学习能力够强。大概看了两周文档之后,便开始决定正式搭框架了。而过了一个月之后,已经把整个app的主体功能实现了。


在整个开发过程中,遇到的主要问题包括以下几个方法:


  1. Xcode问题 beta1 经常软件崩溃 indexing cpu 100%无法完成  beta3解决  beta5 继续indexing CPU100% 无法完成。
  2. 每一次 xcode 升级语法都有调整  每一次更新软件都是,bug 调整好久 其中 ? !的加减似乎每个版本都有调整。
  3. 升级到 beta6时,苹果对底层框架进行了一些调整,有些方法之前实现好好的,忽然就在父类找不到了,或者换了方法。

开始用swift开发时,就被有经验的ios开发者告诉过 苹果升级 xcode 只关心用户体验,不会关心开发者的体验的,所以很多大的调整要习惯,有些功能不能实现也属正常,所以对一些功能好久都不能实现  总是徘徊在 是不是xcode 这个版本有Bug 还是我的实现方式不正确上。


现在自己电脑上的xode 版本是6.0 前几天有尝试升级到  6.1 GM SEED2  发现升级后部分语法又有调整,这还是小事 严重的是 代码indexing又把cpu跑到了100%(不知道其他开发者有没有遇到过这种问题) ,由于已经用6.0打包提交了一半,未敢在新版本上逗留太久  就切换回6.0了还是等待 除了6.1正式版再说吧。



但不管怎样,从没有接触过iOS开发,到我们的第一款用Swift语言的app 缘创派上线,肯定是国内第一波Swift的app,中间的曲折和经验还是值得记住的。


我们的缘创派app下载地址是:https://itunes.apple.com/cn/app/id695423658



缘创派(http://www.ycpai.com),找互联网创业合伙人

------------------------------------------------------------------------

2016-09-08 11:10:37 philar2016 阅读数 2573

怎样用Swift的UIKit制作一个简单的画板APP???                                                  ---翻译自https://www.raywenderlich.com/87899/make-simple-drawing-app-uikit-swift


在我们成长的某些阶段,很多人都喜欢画画,卡通等。对于我来说,我是伴随着笔和纸长大的一代人,但是计算机和触屏设备的快速发展已经快要取代笔和纸的用途!画画可以在触屏设备上,就像你看到Apple Store里有很多画画的App.

想要学习怎样制作一个画板app?? 好消息就是相对比较简单,感谢在ios里有很多的可用的画板API。

在整个学习过程中,你需要学习到:

1.使用Quartz2D来勾画线条。

2.使用多种颜色。

3.设置画笔的宽度和透明度。

4.创建一个橡皮。

5.设置RGB的颜色属性。

6.保存用户在画板中画的画。

7.共享你的画的朋友圈或微博。

开始制作

首先,下载这个项目的基本框架starter project

打开xcode, 打开你的项目浏览一下里面的文件,你可以看到我基本上没有为你做太多的工作。我只是添加了所有你需要的图片,然后创建了一个app的主视图和该有的约束。这个项目是基于single View Application的模版。

现在打开Main.storyboard然后看一下界面。这个视图控制器在顶部有3个按钮。就像文字所示,这三个按钮分别用来“重置”,“设置画板”和“保存”。 在界面的底部,你可以看到有很多的按钮(有“笔”的背景图片),和一个橡皮。它们都被用来选择颜色。

另外,还有两个视图叫“mainImageView"和“tempImageView"--你之后就会知道为什么你需要这两个视图,这些可以让用户在画画的时候设置不同的画笔透明级别。


视图控制器有actions和outlets两种设置,每一个顶部的按钮都有一个action, 笔的颜色都会连接到相同的action, 另外有两个Image View的outlets.

接下来,我们需要添加一些代码到你的项目里面。

你的App需要以一个简单的画画功能作为开始,用你的手指在屏幕上滑动,来画出一条简单的黑色的线条。

打开ViewController.swift,然后添加下面的属性到类之中:

var lastPoint = CGPoint.zeroPoint
var red: CGFloat = 0.0
var green: CGFloat = 0.0
var blue: CGFloat = 0.0
var brushWidth: CGFloat = 10.0
var opacity: CGFloat = 1.0
var swiped = false

接下来,我来解释一下上面所声明的变量:

1.last point存储的是在画板上最后的一个绘制点,这是使用在一个连续的触笔画在画板上。

2.red,green,blue存储的是当前RGB的值,用来选择颜色。

3.brushWidth和opacity存储的是画笔的宽度和透明度。

4.swiped定义了是否触笔是连续的。

5.RGB的默认值是0,也就是说画画的颜色以黑色为默认值。默认的透明度设置为1.0, 线条的宽度设置为10.0.

现在,终于到了画画的阶段了! 所有的touch-notifying方法都是来自于父类UIResponder, 它会响应触碰开始,移动,触碰结束的事件。你会用到这3种方法来实现你的画画逻辑。

现在开始添加以下的方法:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
  swiped = false
  if let touch = touches.first as? UITouch {
    lastPoint = touch.locationInView(self.view)
  }
}
touchesBegan是当用户把手指按在屏幕上的时候调用的方法,这也就是画画事件开始的第一件事,所以你首先要初始化swiped为false在触碰还没有移动的时候。你还需要保存触碰的移动轨迹在最后一个点位的时候,所以,当用户开始用手指画画的时候,你可以追踪用户手指的轨迹(何时开始)。

接下来,添加以下两个方法到你的代码里:

func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint) {
 
  // 1
  UIGraphicsBeginImageContext(view.frame.size)
  let context = UIGraphicsGetCurrentContext()
  tempImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height))
 
  // 2
  CGContextMoveToPoint(context, fromPoint.x, fromPoint.y)
  CGContextAddLineToPoint(context, toPoint.x, toPoint.y)
 
  // 3
  CGContextSetLineCap(context, kCGLineCapRound)
  CGContextSetLineWidth(context, brushWidth)
  CGContextSetRGBStrokeColor(context, red, green, blue, 1.0)
  CGContextSetBlendMode(context, kCGBlendModeNormal)
 
  // 4
  CGContextStrokePath(context)
 
  // 5
  tempImageView.image = UIGraphicsGetImageFromCurrentImageContext()
  tempImageView.alpha = opacity
  UIGraphicsEndImageContext()
 
}
 
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
  // 6
  swiped = true
  if let touch = touches.first as? UITouch {
    let currentPoint = touch.locationInView(view)
    drawLineFrom(lastPoint, toPoint: currentPoint)
 
    // 7
    lastPoint = currentPoint
  }
}
我在来解释一下:

1. 在第一个方法中,负责在两点之间画一条线。记住这个app会有两个image View--mainImageView(目前为止所画的)和tempImageView(线条你现在所画的)。现在你希望画进tempImageView, 所以你需要定义一个常量,来存储画画的内容。

2. 接下来,你拿到了用户当前触碰的点位,然后画一条线用CGContextAddLineToPoint从lastPoint到currentPoint. 这个将会生产出一些直线,所谓两点一线。

3. 这些就是所有画板的参数,笔刷的尺寸,透明度,颜色。

4. 这就是神奇的部分,这就是你画的路径。

5. 接下来,你需要完成绘画内容,然后渲染整条线到temporary image view.

6. 在touchesMoved里,你设置了swiped为true, 所以你可以追踪到当前的触屏滑动。接着你可以调用hepler方法也就是你刚刚写的drawLine.

7.最后,因为你更新了lastPoint, 所以接下来会继续你的触碰事件。


下一步,添加最后的触屏处理程序touchesEnded.

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
 
  if !swiped {
    // draw a single point
    drawLineFrom(lastPoint, toPoint: lastPoint)
  }
 
  // Merge tempImageView into mainImageView
  UIGraphicsBeginImageContext(mainImageView.frame.size)
  mainImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height), blendMode: kCGBlendModeNormal, alpha: 1.0)
  tempImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height), blendMode: kCGBlendModeNormal, alpha: opacity)
  mainImageView.image = UIGraphicsGetImageFromCurrentImageContext()
  UIGraphicsEndImageContext()
 
  tempImageView.image = nil
}
首先,你检测是否用户在屏幕滑动当中,如果不在,那么就意味着用户点击了屏幕画了一个点。

如果用户是在手指滑动之中,那就是说你可以跃过画一个点--在touchesMoved方法调用之前,当调用touchesEnded方法的时候你就不需要画更多的东西。

最后一步就是合并tempImageView和mainImageView. 你画的触笔tempImageView而不是mainImageView. 

当你在tempImageView里画图的时候,透明度设置为1.0(完全不透明),但当你合并tempImageView和mainImageView时,你可以设置tempImageView的透明度来配置值,可以给你的笔刷定义你想要的透明度。如果你直接画在mainImageView上,那么以不同透明度的画笔画画将是一件非常困难的事。

好啦,现在准备画图吧!运行你的app,你会看见你现在可以画一些黑色的线条在你的画板上了!!!


这是一个非常好的开始哦! 用这些触摸的处理方法你可以有很多的功能。现在到时候填写更多的选项,那我们先从颜色开始。

设置颜色

是时候添加颜色到你的场景上了!

目前总共有10款颜色按钮在界面上,但是如果你想点击其他颜色的笔,现在是没效果的。所以首先,你需要定义这些颜色。添加下面数组属性到类里。

let colors: [(CGFloat, CGFloat, CGFloat)] = [
  (0, 0, 0),
  (105.0 / 255.0, 105.0 / 255.0, 105.0 / 255.0),
  (1.0, 0, 0),
  (0, 0, 1.0),
  (51.0 / 255.0, 204.0 / 255.0, 1.0),
  (102.0 / 255.0, 204.0 / 255.0, 0),
  (102.0 / 255.0, 1.0, 0),
  (160.0 / 255.0, 82.0 / 255.0, 45.0 / 255.0),
  (1.0, 102.0 / 255.0, 0),
  (1.0, 1.0, 0),
  (1.0, 1.0, 1.0),
]
这些建立了一个关于RGB值的数组,每一个数组的元素都是3个CGFloats的元组。这里的每一个颜色都匹配每一个界面按钮的标签。

接下来,找到pencilPressed这个方法,然后添加下面的代码:

// 1
var index = sender.tag ?? 0
if index < 0 || index >= colors.count {
  index = 0
}
 
// 2
(red, green, blue) = colors[index]
 
// 3
if index == colors.count - 1 {
  opacity = 1.0
}
这是一个很短的方法,但是让我们来一起一步一步的看一下。

1. 首先,你需要知道哪一个颜色的索引是用户选择的。这里会有一些地方会导致错误-错误的标签,标签没有设置,数组里没有足够的颜色--所以你需要检查这些地方。默认值是黑色,也就是第一个颜色。

2. 接下来,你设置red, green, blue的属性。

3. 最后一个按钮是橡皮,所以有一点特殊。橡皮按钮设置了颜色是白色,透明度为1.0。就像你看到的背景是白色一样,这会给你一个非常方便的橡皮效果。

现在准备好画彩色的画了么?? 运行你的app,你可以绘画出彩色的线条啦!现在你可以点击颜色按钮,改变笔刷的颜色。


白板

所有伟大的艺术家都有退后一步然后摇着头低声说“不,不,这永远不会做!”这种情况。那么你要提供一种情况来清理你的画板,并让用户可以一遍又一遍的开始画图。你已经有一个reset(重置)按钮设置在您的应用程序里了。

找到reset()这个方法,并添加这句代码:

mainImageView.image = nil
就是这样,信不信由你。上面的代码就是设置mainImageView的图为空。瞧!你的画板已经清理啦。记住,你画的线是在imageView的内容里面,所以把这清除为0,将会重置所有的事情。构建和运行你的app, 随便画一些东西,然后点击重置按钮来清除你的画。就是这样,你可没必要因为撕毁你的画而沮丧。


完成触摸--设置

好啦!你现在拥有了一个功能性的画板app,但是我们还有第二个设置界面要做。

首先,打开SettingsViewController.swift然后添加下面两行属性到类里:

var brush: CGFloat = 10.0
var opacity: CGFloat = 1.0
这个会让你一直追踪用户选择的笔刷的尺寸和透明度。

现在添加以下代码到sliderChanged():

if sender == sliderBrush {
  brush = CGFloat(sender.value)
  labelBrush.text = NSString(format: "%.2f", brush.native) as String
} else {
  opacity = CGFloat(sender.value)
  labelOpacity.text = NSString(format: "%.2f", opacity.native) as String
}
 
drawPreview()
这上面的代码,随着滑动条控制的变化,滑块值将适当的匹配。那么你就需要更新那些在drawPreview的预览图像,那么你将添加下一段到drawPreview里:

func drawPreview() {
  UIGraphicsBeginImageContext(imageViewBrush.frame.size)
  var context = UIGraphicsGetCurrentContext()
 
  CGContextSetLineCap(context, kCGLineCapRound)
  CGContextSetLineWidth(context, brush)
 
  CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0)
  CGContextMoveToPoint(context, 45.0, 45.0)
  CGContextAddLineToPoint(context, 45.0, 45.0)
  CGContextStrokePath(context)
  imageViewBrush.image = UIGraphicsGetImageFromCurrentImageContext()
  UIGraphicsEndImageContext()
 
  UIGraphicsBeginImageContext(imageViewBrush.frame.size)
  context = UIGraphicsGetCurrentContext()
 
  CGContextSetLineCap(context, kCGLineCapRound)
  CGContextSetLineWidth(context, 20)
  CGContextMoveToPoint(context, 45.0, 45.0)
  CGContextAddLineToPoint(context, 45.0, 45.0)
 
  CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, opacity)
  CGContextStrokePath(context)
  imageViewOpacity.image = UIGraphicsGetImageFromCurrentImageContext()
 
  UIGraphicsEndImageContext()
}
这个方法用了同样的技术来画一个预览设置,就像视图控制器用触摸的处理方法。在这两种情况下,该方法绘制一个点,而不是一条线(有着适当宽度和不透明度的滑块的值)。

运行你的代码,打开设置界面,调动滑动框。你会看见预览图和值会跟着你的滑动框移动而变化。


集成设置

这里有一个重要的地方丢失了,你有没有注意到??

更新过的透明度和宽度值还没有被应用于ViewController绘图板!这是因为你还没有把设置界面特定的值放到ViewController里。这就需要用到代理和协议了!

打开SettingViewController.swift文件,然后添加以下代码:

protocol SettingsViewControllerDelegate: class {
  func settingsViewControllerFinished(settingsViewController: SettingsViewController)
}
这段代码的意思就是定义一个协议,里面有一个叫settingsViewControllerFinished的方法。

然后添加一个属性到SettingsViewController的类里:

weak var delegate: SettingsViewControllerDelegate?

我们将引用这个代理。如果有一个代理,那么你需要通知它当用户点击了关闭按钮。找到close()然后添加以下代码到这个方法的最后:

self.delegate?.settingsViewControllerFinished(self)
这个就是调用代理的方法,然后可以自己更新新的值。

现在,打开ViewController.swift文件,然后添加一个扩展的类在文件底部给协议。

extension ViewController: SettingsViewControllerDelegate {
  func settingsViewControllerFinished(settingsViewController: SettingsViewController) {
    self.brushWidth = settingsViewController.brush
    self.opacity = settingsViewController.opacity
  }
}
这就表明了类符合SettingViewControllerDelegate和实现它的一个方法。在实现中,需要做的就是设置视图的滑动控件来调节当前画笔的宽度和透明度的值。当用户从画图转向设置界面,这就意味着你需要让用户打开你的设置界面。

添加下面的方法复写这个类:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  let settingsViewController = segue.destinationViewController as! SettingsViewController
  settingsViewController.delegate = self
  settingsViewController.brush = brushWidth
  settingsViewController.opacity = opacity
}
当用户点击设置按钮触发segue,这个方法将配置新的SettingsViewController, 通过设置代理。

运行你的app,在这个阶段,你会看到笔刷和透明度值现在更新后可以在设置界面改变。现在,你可以画许多颜色的画,也可以有不同大小的笔和透明级别啦!!



收尾工作--自定义颜色选择器

现在,你有10个颜色按钮在你的画板界面中,但是在颜色选择器里,有一系列的RGB颜色调动栏在你的设置界面中。

既然你已经提供了一个预览画笔大小和透明度,你不妨再提供一个预览新画笔的颜色!。 预览效果会显示在预览图像里,就像透明度和画笔预览会显示在RGB颜色里。不需要额外的图片,重用你已经有的!

打开SettingsViewController.swift 然后添加下面的属性:

var red: CGFloat = 0.0
var green: CGFloat = 0.0
var blue: CGFloat = 0.0
你要用到这些来保存你当前的RGB值。

现在添加以下代码到colorChanged:

red = CGFloat(sliderRed.value / 255.0)
labelRed.text = NSString(format: "%d", Int(sliderRed.value)) as String
green = CGFloat(sliderGreen.value / 255.0)
labelGreen.text = NSString(format: "%d", Int(sliderGreen.value)) as String
blue = CGFloat(sliderBlue.value / 255.0)
labelBlue.text = NSString(format: "%d", Int(sliderBlue.value)) as String
 
drawPreview()
这是将要被你调用的方法,当你的RGB滑块移动的时候。在上面的代码中,请注意你所做的事情就是更新属性值,更新标签。

如果你现在运行你的项目,你会发现颜色变化将不会显示在预览里。为了显示,你需要在drawPreview()里做一点小小的改变。搜索行调用CGContextSetRGBStrokeColor,替换所有的0.0值和红色,绿色 蓝色变量。

在第一个方法中,替换调用CGContextSetRGBStrokeColor,用下面的代码:

CGContextSetRGBStrokeColor(context, red, green, blue, 1.0)
接下来,在下半部分,替换调用CGContextSetRGBStrokeColor,用下面的代码:

CGContextSetRGBStrokeColor(context, red, green, blue, opacity)
现在,你已经有了所有的正确的设置,你想要正确显示这个设置界面,添加以下代码到viewWillAppear:

override func viewWillAppear(animated: Bool) {
  super.viewWillAppear(animated)
 
  sliderBrush.value = Float(brush)
  labelBrush.text = NSString(format: "%.1f", brush.native) as String
  sliderOpacity.value = Float(opacity)
  labelOpacity.text = NSString(format: "%.1f", opacity.native) as String
  sliderRed.value = Float(red * 255.0)
  labelRed.text = NSString(format: "%d", Int(sliderRed.value)) as String
  sliderGreen.value = Float(green * 255.0)
  labelGreen.text = NSString(format: "%d", Int(sliderGreen.value)) as String
  sliderBlue.value = Float(blue * 255.0)
  labelBlue.text = NSString(format: "%d", Int(sliderBlue.value)) as String
 
  drawPreview()
}
这样你就可以看到,这个方法预设了正确的值给所有的标签和滑动栏。 drawPreview调用预览视图会正确的显示出来。

最后,打开ViewController.swift. 就像之前一样,你需要确定当前的颜色到设置界面,所以添加下面3行代码到prepareForSegue的最后:

settingsViewController.red = red
settingsViewController.green = green
settingsViewController.blue = blue
这样RGB滑动框就被正确设置了。

最后,找到settingsViewControllerFinished在扩展类里,添加下面3行代码到方法里:

self.red = settingsViewController.red
self.green = settingsViewController.green
self.blue = settingsViewController.blue
大功告成! 是时候运行你的app啦。 滑动你的颜色选择器,选中RGB颜色,显示在RGBPreview里,现在默认的笔的颜色就在画板上啦。

你得到了一款属于你自己的画板。。现在可以尽情的画图享受了。。

2016-01-19 16:56:24 tangxiaoyin 阅读数 524

在过去的一年里,Swift火得一塌糊涂,而苹果官方也给出了开源后的诸多好处和美妙的前瞻。但是当下,有多少款App已经使用到了Swift语言?本文作者,来自Instagram的iOS工程师Ryan Olson对App Store免费排行榜前100名应用进行了分析,发现大多数并未使用到。

不久之前,Capital One iOS工程师、Natasha The Robot博主Natasha Murashev在Twitter上提问:哪些公司在使用Swift?

图片描述

根据回答的数量,你可能会认为大多数应用已经深入过渡到Swift语言了。但我决定不依赖传闻还有一次性的回答,而是从App Store取一些数字,以获得更清晰的概念。我再次下载了App Store免费排行榜前100名的应用,写了些脚本来分析这些ipa文件。结果让我很惊讶,其中大多应用并未使用到Swift语言。

图片描述

需要澄清的是,这些应用可能并不代表整个iOS生态环境的状况,但它们显然占据着很重要的地位。通过查看这些应用,除了关于Swift的问题外,我们还能了解到一些其他有趣的事情。例如我很惊讶的发现:这些应用没有一个是以iOS 9为目标部署的,甚至还有几个支持iOS 5的。

图片描述

所有这些应用都是用iOS 8以及更高版本的SDK来构建的,大多数用到了iOS 9.X的SDK,而且大部分应用仍同时支持iPhone和iPad。

图片描述

由于免费排行榜的前100名相对于使用Swift的应用来说数量太少,我还对自己数据库中一些其他的应用进行了分析,并发现有一些知名应用程序用到了Swift语言。下面列表以首字母排序:

  • Airbnb
  • Apple Store
  • Bitmoji
  • CNN
  • Camera+
  • Dubsmash
  • Eventbrite
  • Fitbit
  • Flipagram
  • Flipboard
  • Groupon
  • Hotwire
  • Imgur
  • KAYAK
  • LinkedIn
  • Lyft
  • Medium
  • Meetup
  • Microsoft Selfie
  • Mint
  • MyFitnessPal
  • Pandora
  • Product Hunt
  • Timehop
  • Truecaller
  • Tumblr
  • Twitter
  • VSCO
  • Venmo
  • Vimeo
  • Vine
  • Wallapop
  • The Weather Channel

前100名应用的数据集如下,查看完整列表,且有搜索了解详情的需求可点击链接查阅top100.csv文件:

图片描述

编者注:此前,@图拉鼎曾总结归纳过《那些用 Swift 写的 App 们(不断更新中…)》,感兴趣的童鞋可以移步阅览。

英文来源:Are the Top Apps Using Swift?
作者:Ryan Olson(@ryanolsonk),现任Instagram iOS工程师
翻译:孙薇
审校/责任编辑:唐小引

本文为CSDN编译整理,未经允许不得转载,如需转载请联系mobile#csdn.net(#换成@)

2014-10-17 17:50:36 hong1595 阅读数 1160

随着苹果新品发布会结束,我们迎来了新iPad、Mac家族更新、OS X Yosemite正式版、iTunes 12.01等,相比较起来,另一个不太起眼的发布是,苹果在其官方网站发布了一个mini站点(http://www.apple.com/swift/),宣传使用Swift开发的第三方App以及部分大学开设Swift课程。

20141017111032.jpg

在页面中苹果表示,开发者已经开始利用Swift开发应用:

从Swift向世人公开之后,顶级开发者就开始拥抱Swift。许多公司已经用它来增强自己的应用,其中的一些公司完全使用Swift来开发它们的App。这个快速高效的语言可以提供实时反馈,并能与现有的Objective-C代码无缝融合。因此Swift不仅能帮助开发者编写更安全、可信赖的代码,还能帮他们节省时间、最终创造更丰富的应用体验。

360桌面截图20141017111938.jpg

一个完全使用Swift编写的应用的界面展示

苹果还介绍了一些使用Swift编写的应用,其中包括一些知名应用,如Clear、Yahoo Weather、LinkedIn等。苹果还表示,用Swift编写的某种搜索算法,其性能表现是使用Objective-C的2.6倍以及Python的8.4倍。

360桌面截图20141017112643.jpg

苹果还宣布一些顶级大学如斯坦福大学等也意识到了Swift的潜力,并且开设了Swift课程,并且其中的一些还将在iTunes U上提供免费的视频课程,这表明今后学习Swift进阶课程将无比方便。

360桌面截图20141017113158.jpg

开设Swift课程的大学列表

从苹果推广Swift的态度来看,绝对是不遗余力的,开发者越早拥抱Swift越可能得到苹果的推荐,所以还等什么呢?赶紧用Swift开发应用并提交到App Store吧~