app名称 swift

2015-04-20 15:58:01 kmyhy 阅读数 3772

数据模型

接下来创建数据模型。

首先我们来熟悉一下Xcode项目文件的组织结构:


默认模板会创建一个以项目名称为名的文件夹。在这个文件夹下有一个supporting files的子文件夹,其中存放plist和资源文件。当项目很大时,会创建大量的文件,查找文件就会变得很困难。因此我们需要有一个良好的项目文件组织形式。

首先,我们新建一个文件夹(group),命名为GUI。在ScaryBugsMac文件夹上点击右键,将弹出一个快捷菜单,选择NewGroup,然后输入GUI。

然后将所有跟UI有关的文件拖到这个文件夹( AppDelegate.swiftMasterViewController.swift/.xiband MainMenu.xib),如下图所示:


然后新建另一个文件夹Model。


在Model文件夹中将包含如下内容

·      ScaryBugData: 包含两个属性:昆虫的名称及昆虫的估价。

·      ScaryBugDoc: 包含3个属性:昆虫图片、昆虫缩略图及一个ScaryBugData属性。

实现模型对象

注意: 如果你阅读过 How ToCreate A Simple iPhone App on iOS 5 Tutorial, 你会发现接下来的内容和那篇教程中的相应内容几乎一模一样。这是因为Mac和iOS编程大部分SDK都是系统的,除了UI和操作系统相关的API。而模型对象不涉及UI,因此模型对象的代码基本是一致的。

对于ScaryBug的模型类,将Mac版本与iOS版本只有一个地方不同,即将UIImage类修改为NSImage即可。当然,你也需要将它从O-C实现修改为Swift实现。

在Model文件夹上点击右键,点击 “New File…”,然后选择OS X\Source\Cocoa Class 模板,然后点击Next。


类名输入 ScaryBugData, Subclass of 输入 NSObject ,点击 Next。


在最后一个弹出界面中,点击Create。项目导航窗口将显示如下:


打开ScaryBugData.swift 替换为如下内容:

import Foundation  

class ScaryBugData: NSObject {

   var title: String

   var rating: Double  

   override init() {

    self.title = String()

    self.rating = 0.0  

}

init(title: String, rating: Double) {

     self.title = title

     self.rating = rating  

}

}

然后创建另一个模型对象ScaryBugDoc

打开ScaryBugDoc.swift 编辑为如下内容:

import Foundation

import AppKit  

class ScaryBugDoc: NSObject {

   var data: ScaryBugData

   var thumbImage: NSImage?

   var fullImage: NSImage?

override init() {

     self.data = ScaryBugData()

   }

init(title: String, rating: Double, thumbImage: NSImage?, fullImage: NSImage?) {

     self.data = ScaryBugData(title: title, rating: rating)

     self.thumbImage = thumbImage

     self.fullImage = fullImage 

 }

}

注意thumbImage 和fullImage声明为可空的 NSImage ,因此他们不需要在默认构造函数中初始化。

打开MasterViewController.swift ,增加一个属性声明:

var bugs = [ScaryBugDoc]()

这个数组属性用于存储昆虫列表,接下来我们将会用一些数据填充这个数组。

填充数据及图片

MasterViewController 需要用一系列昆虫来填充。你可以从此处下载所需的

 昆虫图片

下载完图片之后,,将所有图片从Finder中拖到Images.xcassets中如下图右边AppIcon之下的位置:


打开 MasterViewController.swift 添加如下方法:

func setupSampleBugs() {

   let bug1 = ScaryBugDoc(title: "Potato Bug", rating: 4.0,

     thumbImage:NSImage(named: "potatoBugThumb"), fullImage: NSImage(named: "potatoBug"))

   let bug2 = ScaryBugDoc(title: "House Centipede", rating: 3.0,

thumbImage:NSImage(named: "centipedeThumb"), fullImage: NSImage(named: "centipede"))  

   let bug3 = ScaryBugDoc(title: "Wolf Spider", rating: 5.0,

thumbImage:NSImage(named: "wolfSpiderThumb"), fullImage: NSImage(named: "wolfSpider"))  

   let bug4 = ScaryBugDoc(title: "Lady Bug", rating: 1.0,

thumbImage:NSImage(named: "ladybugThumb"), fullImage: NSImage(named: "ladybug"))

   bugs = [bug1, bug2, bug3, bug4]

}

打开AppDelegate.swift ,找到 applicationDidFinishLaunching方法,在addSubview之前加入以下代码:

masterViewController.setupSampleBugs()

编译运行程序,确保编译通过。

接下来,我们将在UI中显示这些图片和数据。


2019-12-07 15:29:08 baidu_40537062 阅读数 80
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
        let appName = Bundle.main.infoDictionary!["CFBundleDisplayName"] as! String

参考博客:
链接: iOS 获取当前app的名称和版本号

2016-08-10 18:33:18 chenyongkai1 阅读数 12313


App的名字设置方式有很多种,如果在App打包上线时不做修改,最终App的名字就是Xcode在建立工程时的名字。好的习惯是工程建立时使用英文(pinyin),那么App也就是“英文”名字了,虽然Xcode也支持直接用中文命名工程(甚至是方法名……),但有时也会因此产生一些不必要的麻烦甚至莫名其妙的bug。

本文主要介绍两种设置App名称的方法,第一种较为简单,第二种涉及简单的版本国际化与本地化(Localization)的问题。


1.Bundle display name

先看此方法的具体设置步骤:

  • 建立工程如下,如果不设置App名,默认的App名就是工程名了。

QQ截图20160309174314.png

  • 点击工程-TARGETS-Info,添加“Bundle display name”,string值填写要设置的App名称。

QQ截图20160309174324.png

  • 再次编译,效果如下,这个方法就是这么简单了。

1468630-7d782f2d30827276.png

具体也没太多好说的,检索App名称设置时,大部分答案也是这个,因为比较简单。

这里提一下Bundle name和Bundle display name:

Bundle name - is folder name, where your app (including executable file and all resources) will be stored (Cool Program.app)。建议不要修改bundle name
Bundle display name - is what will be shown on iPhone screen,即当你安装该app到iPhone上显示的name。
注意:Bundle Display name must correspond to Bundle name,即bundle display name和bundle name不能相差太远。例如bundle name设置为 TheApplication, 而 bundle display name设置为“金瓶梅”,则apple会拒绝你的app。

2.InfoPlist.strings->CFBundleDisplayName

这种方法较为繁琐,但是可以支持多语言版本名称的设置,即Localization,也先看具体步骤:

  • 新建一个Strings File,命名应该不一定非得是InfoPlist.strings,应该是沿用习惯。

54.png

  • 点击工程-PROJECT-Info-Localizations,添加简体中文支持,如果想支持繁体,也可继续添加,其他语言亦然。

QQ截图20160309174007.png

QQ截图20160309174019.png

  • 点击之前创建的InfoPlist.strings - 点击右边的“Localizion”- 添加简体中文

1468630-d4b52eb0f01a6ad1.png

可以选择支持英文

1468630-a885a69c4cf737ca.png

QQ截图20160309173853.png

  • 分别设置中英文名字

"CFBundleDisplayName" = "中文名字";

"CFBundleDisplayName" = "EnglishName";

名字字符串自己填写就好,这里只是示范

QQ截图20160309173740.png

  • 编译工程

分别切换模拟器的设置中的语言至中英文模式,分别查看appiocn下面的名字的变化:

'.png

3.关于默认语言的设置:Localization native development region

Xcode建立工程时,默认语言环境是英文,所以在调用一些系统空间时(例如相机相册),其控制按键的标题都是英文显示的状态,快速的设置方法就是设置Localization native development region的值,具体步骤可以参考此文:Localization native development region 更改语言无效 中的第一段内容。

4. Localizations版本国际化

这个就是为了让APP支持多国语言环境,最好的Demo应该是环信的官方Demo,这里只是介绍一下简单的用法:

  1. 同添加InfoPlist.strings的做法相同,添加一个Localizable.strings文件

  2. 对应中英文(其他语言自行添加),分别添加下列语句:

1
2
3
4
5
6
7
8
9
"alertTitle" "标题";
"alertMessage" "信息";
"alertOk" "确认";
"alertOther" "其他";
 
"alertTitle" "title";
"alertMessage" "message";
"alertOk" "confirm";
"alertOther" "other";

关于上述的key和value,只是示范,可自行定义,调用这些key-value需要利用NSLocalizedString(<#key#>, <#comment#>)系统宏,例如:NSLocalizedString(@"alertTitle", @"这是一句注解,根据情况写"),第一个参数即在strings文件中自定义的key,根据不同的语言环境,系统会自动检测这个key对应的value(中文还是英文),第二个参数是注释,为了便于理解,可以为nil。
实际用例:

1
2
3
4
5
6
7
- (void)createAlertViewWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancel:(NSString *)cancel andOther:(NSString *)other
  {
      UIAlertView * alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancel otherButtonTitles:other, nil];
      [alert show];
  }
  //调用
  [self createAlertViewWithTitle:NSLocalizedString(@"alertTitle", @"这是一句注解,根据情况写") message:NSLocalizedString(@"alertMessage", @"") delegate:nil cancel:NSLocalizedString(@"alertOk", nil) andOther:NSLocalizedString(@"alertOther", nil)];

分别设置系统的语言环境至中英文模式,效果如下:

QQ截图20160309173458.png

上面的写法看起来比习惯上直接写string去设置标题要麻烦许多,但是常用的标题可以进行二次宏定义管理,那样不仅使用方便,还便于统一管理。
看一下环信Demo中的示范:

1468630-1b6e905c3d91a528.png


2016-09-19 10:21:07 philar2016 阅读数 4065

准备好了么? 准备好创建你的第一个app了么? 在这个教程中,你会学习到如何创建一个简单的游戏,叫做“Tap me",游戏的玩法是看你在30秒之内可以点击按钮多少次,来给你评分。                                                                                       ----翻译自https://www.raywenderlich.com/114262/learn-to-code-ios-apps-with-swift-tutorial-4-your-first-app


准备开始:

首先打开你的Xcode, 然后选择Create a new Xcode project.


接下来,选择IOS-->Application-->Single View Application,然后点击next.


然后填写下面的项目:

Product Name: Tap me

Organisation Name: 这一栏你可以空着,也可以填写你的用户名称等

Organisation Identifier: 填写com.你的名字,比如: com.zhangsan

Language: Swift

Devices: iPhone


Storyboards

你会发现这个项目开始的时候,你的app已经自动帮你创建好了几个文件,那么首先 我们先来看一下Main.storyboard.


当你点进去的时候,你打开了一个GUI,也就是我们所说的用户界面,用来展示iPhone屏幕上所显示的东西。


现在呢,你的app是空白的。我们现在可以做一些小小的改变了。现在 你需要确保你的右侧边菜单是打开状态的:


接下来,选择attributes Inspector:


这个东西其实就允许你编辑不同的属性了,现在我们来尝试改变一下屏幕的颜色:


现在,在顶部的菜单里,你先选择iPhone 6  Simulator,然后运行app,会稍微等待一小会儿,但是不要着急。最后运行之后,你会发现你的模拟器是这样的:


添加Label到你的屏幕中

现在看来一个绿色的屏幕占据了你的整个界面,现在我们可以适当的添加一些东西来和用户互动了,添加一些物品,你需要找到OBject Library,在右下方。你现在首先需要添加的就是Label. Label其实就是文本。你可以滚动下滑找到Label这个项:


鼠标拖拽Label到你的屏幕中去,把它放在顶部中心位置:


你现在可以用Attributes Inspector来改变名称,修改title为"Time:30".


如果你发现你的Label在屏幕上看上去被缩短了,你可以点击你的Label, 然后选择Editor\Size to Fit. 

当你修改之后,运行app,马上就显示到了界面上面:


根据你的storyboard, 你的Label应该是在中心位置,对不对?  问题是不是每一部iOS设备都有相同的规格,所以可能有时确实有点混乱。

那么怎么解决它呢? 你需要给你的Label添加一些约束了!

首先点击你的Label, 接下来,选择Align按钮,在整个屏幕的底部,然后选择Horizontal Centre in Container然后选择Add 1 Constraint.


这就决定了你的label会处于水平剧中的位置,但是你需要具体的设置。做这些,你要点击底部的pin按钮,然后点击红色的线到顶部,基于当前的距离然后点击Add 1 Constraint:


新的约束Label上会有一条或几条橙色的线, 这是因为你摆放Label的位置和它的位置不相符引起的。


如果出现了这种情况,你只需要点击triangle icon在右手边的角部位置,有一个All Views in View Controller选项,点击Update Frames选项。


现在,拖拽一个新的label到屏幕的底部,这个label是用来决定最后游戏分数的。 这两个label唯一的不同点就是 你现在将要给这个label设置大小尺寸:Font size为40, line为2, 设置Alignment为Center


在Size Inspector里,设置height为130:


你需要设置一些约束。首先你需要设置水平居中。 选择分数的label,点Align按钮,然欧选择Horizontal Center in Container然后点击Add 1 Constraint.

接下来,点击Pin按钮,添加一个bottom pin, 然后选择height constraint. 设置高度为130, 最后点击Add 2 Constraints按钮。


如果这一次你又看到了橙色的线,那么你还是点击triangle icon在右手边的角部位置,有一个All Views in View Controller选项,点击Update Frames选项。


运行你的app,现在你的界面应该是这个样子了:


添加一个按钮

为了添加一个按钮,你要找到右下角的Library, 然后添加一个button到你的屏幕中的中心位置:


别忘记给你的button添加约束哦~这一次我们把它设置为水平居中和垂直居中。


现在 用Attributes inspector来改变你的title为Tap Me! 然后设置Background为white colour.

为了使按钮更好的显示,你需要设置不同的约束,这一次你点击Pin按钮,然后点击Width和Height,分别设置为167和113.


如果你看到了橙色的线,记得Update Frames就像之前所做的那样。

你的按钮现在应该是在一个可以点击的存在于中心位置的按钮,运行你的app 你可以看到下图所示:


你现在可以点击这个按钮了。但是目前没有任何反应,所以你需要下一步的步骤。

连接你的视图到代码

现在你需要连接你的代码到视图控制器中,每一个界面都对应着一个Class,一个View Controller. Xcode已经为你创建了一个ViewController.swift文件。

而你需要做的就是为你的label添加两个属性,添加下面的代码到你的ViewController.swift文件中的ViewController类里。

@IBOutlet var scoreLabel: UILabel!
@IBOutlet var timerLabel: UILabel!
这两行代码创建了UILabel的属性,这时候你的视图就连接到了它。

同样的,你需要一个方法:这个方法就是用来说当这个按钮被按下的时候调用,所以添加下面的方法到ViewController类里:

@IBAction func buttonPressed()  {
  NSLog("Button Pressed")
}
就像是IBOutlet, IBAction让storyboard编辑器知道了这个方法,所以你可以连接这个按钮点击的事件了。

试着连接这些属性和方法,打开Main.storyboard, 你只需要简单的一步操作就可以,那就是Ctrl+拖拽,从ViewController拖拽到Time Label.


这个时候 你会发现有一个小的对话框弹出来了,选择timerLabel, 这就是一个UILabel的项也就是你之前创建在ViewController.swift文件中的。


现在,重复之前的Score Label, 然后连接到scoreLabel上。

下一步,我们要把按钮连接到buttonPressed()这个方法上,你需要Ctrl+拖拽storyboard上的按钮到到视图控制器上面。


接下来,选择buttonPressed()


现在,试着运行一个你的app,然后不断的点击你的按钮。你会看到NSLog在显示你一直在用buttonPressed()的这个方法。也就是当你每点击一次按钮的时候,就会有一次输出。


操作你的Label

其实你应该学习的是如何操作你的label,非常简单。代替你的buttonPressed()中间的代码:

scoreLabel.text = "Pressed"
现在 当你运行你的app,然后点击按钮的时候,接下来底部的屏幕会改变为"Pressed"

为了使用这些来让ScoreLabel追踪你的分数,你需要额外的一点工作要做。

追踪你的score

为了追踪你的分数,首先你需要创建一个变量,在两个IBOutlet声明的下面,你可以声明另外一个变量:

var count = 0
下一步,为了表现出buttonPressed()的count增加,你需要插入下面一行代码:

count++
其实,count++ 是 count = count + 1的简写而已。

现在,我们改变一行scoreLabel的设置:

scoreLabel.text = "Score \n\(count)"
运行你的app,然后测试后你会发现,当你点击按钮的时候,底部的label已经开始追踪你的分数啦。你的app已经越来越接近一个游戏了。

现在是时候开始着手于时间上的问题了,如果你想让你的app时间上工作正常,呢么你需要创建两个新的属性。一个变量是int 来追踪秒数,另外一个是NSTimer变量,来告诉你时机终止。

添加下面两行代码在count的下面:

var seconds = 0
var timer = NSTimer()
为了使用这两个变量,你需要创建两个方法,第一个我们叫它做setupGame(), 然后在这个类的底部添加下面的方法:

func setupGame()  {
  seconds = 30
  count = 0
 
  timerLabel.text = "Time: \(seconds)"
  scoreLabel.text = "Score: \(count)"
}
这些代码设置了所有的都返回到初始值,当这个游戏开始的时候。如果你不添加这个代码,那么秒数会一直减少减少,然后分数会一直增加,永远不会重置。

下一步,我们需要为setupGame()_方法开始timer, 为了做这件事,你需要用房scheduledTimerWithTimeInterval()这个方法来得到你想要的timer, 插入下面的代码到setupGame()方法中:

timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("subtractTime"), userInfo: nil, repeats: true)

添加下面的代码,现在确保你已经在viewDidLoad()中调用了setupGame()方法:

setupGame()
下一个方法你需要写的就是subtractTimer(). 这个方法用来减少秒数,更新timeLabel, 触发Alert来告诉玩家时间已经为0 了。

你开始的时候就需要知道如何去做:秒数的减少,更新timerLabel, 当时间到0的时候创建一个if语句。

func subtractTime() {
  seconds--
  timerLabel.text = "Time: \(seconds)"
 
  if(seconds == 0)  {
 
  }
}
第一件事你需要添加到代码里的是:if语句。 也就是说如果什么事件发生了阻止了时间的count,那么用到了下一行代码:

timer.invalidate()
运行你的app,现在timer 时间已经开始计时了。


现在,也就是说我们到达了最后一部了。

红色警告

接下来,你要学习的就是如何做一个警告框,当你完成了这个警告框,你的界面应该是下面这个样子:


准备好要开始了么? 首先第一件事儿 你需要添加一个UIAlertController. 插入下面的代码到invalidate()的语句中,在if语句里。

let alert = UIAlertController(title: "Time is up!",
 message: "You scored \(count) points",
 preferredStyle: UIAlertControllerStyle.Alert)
这行代码决定了警示框是什么样子的,具体到了title, message, 和style.

接下来,你需要校准按钮,需要用到addAction()的方法。尝试下面的代码,放在alert声明之后。

alert.addAction(UIAlertAction(title: "Play Again", style: UIAlertActionStyle.Default, handler: {
  action in self.setupGame()
}))
现在就到了最后一行代码的时候啦,这一行代码实际上告诉app来显示UIAlertController. 这用到了presentViewController(),插入下面的代码到alert.addAction()之后

presentViewController(alert, animated: true, completion:nil)
接下来,运行你的代码,恭喜你有了自己的第一个小游戏的app.


2017-09-23 14:21:11 u010960265 阅读数 3966

在info.plist文件中添加key值Bundle display name+app名称


君凯商联网-iOS-字唐名僧

swift3-app国际化

阅读数 709