2015-10-30 18:48:11 u011690583 阅读数 2666
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3672 人正在学习 去看看 许英俊

IOS9.0-Swift 引导页面实现

学习不久ios开发,也想写点东西,第一次写这东西,不妥之处还请大家指正,我会及时修改。

  • 平台:xcode7.1 x
  • 语言:swift2.1
  • 实现目标:完成一个app的引导页面制作,从无到有
  • 第一步:创建工程
  • 第二步:添加storyboard
  • 第三步:编写代码
  • 第四部:测试
  • 最后总结

第一步:创建一个Single View Application

这里写图片描述

这个最简单,网上都说烂了,不再提及,不会的就再百度吧。

工程创建好了是这样得

这里写图片描述

第二步:添加storyboard

选择工程目录下的 Main.storyboard ,出现storyboard的设计界面。当然,起初里边得模拟器会显示的很大,如果想要那种跟手机差不多的要再设置一步

这里写图片描述

在出现的对话框中选择 disable size classes 。完成这些以后,中间的viewcontroller就会像手机一样的大小了。

这里写图片描述

好了,现在出现两个viewcontroller,一个用来当引导页面(只会第一次启动应用的时候出现),一个用来当以后app的主要显示页面。

我们再在两个view 中添加一些控件以示区别。添加的方法也是拖拽,如果用过vb或者微软开发图形界面的朋友会对此很熟悉。

添加几个labelview 然后修改文字,让他看着更那么回事。

这里写图片描述

界面基本搞定,其实在引导页面是需要一个按钮跳到主页面得,这里先不说。按钮自己加上,后边再说。

这里写图片描述

第三步:编写代码

到这里,我们要编写代码了

简单说一下,用到NSUserDefaults这个东东,这个玩意就是用来保存些app的配置文件,key value的玩意,我们要设置一个标志,每次启动app都判断标志位。

代码块

代码块语法遵循标准markdown代码,例如:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

            //获取初次启动标志
            let sign:Bool = NSUserDefaults.standardUserDefaults().boolForKey("FirstStartSign")

            //如果没有获取不到,并设置其为true
            if(!sign){
                NSUserDefaults.standardUserDefaults().setBool(true, forKey: "FirstStartSign")
            }else{
                //获取到不是第一次启动,直接跳转主页面viewpage2
                //这句是获得Main.storyboard这个东西,我们的viewcontroller都在他里边,所以要先得到他。
                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                //通过main的到我们的page2,addNewPage 就是我们填写的storyboard ID 别搞错了,后边得as ViewPage2Controller 是和你这个viewcontroller绑定的swift文件。
                let viewPage2 = storyboard.instantiateViewControllerWithIdentifier("addNewPage") as! ViewPage2Controller

                //这个就没啥说的了  
                self.window?.rootViewController = viewPage2
            }

            return true
        }

这里 我们完成一个事就是 在程序第一次启动,判断NSUserDefaults里边是否有相对应得标志(我们这里设置的是FirstStartSign),然后读读逻辑就能明白是怎么回事

测试

现在就可以打开模拟器看看效果了

这里写图片描述

好 第一次进入的时候就是这样,他来到了我们要用来做引导得界面,这个就可以设置一个轮播图,带上一个按钮,跳转到其他页面。

在来打开第二次:按win(command)+shift +H 快速按两下,呼出模拟器中的任务管理器,然后结束掉当前运行得程序,再打开就行

这里写图片描述

是不是看到效果了,再次重启应用怎么都不会进入引导页面了,好基本上也就完事。下边就是对这个小demo做一些完善。这里就不详细说了,给截图上代码

这里写图片描述

加了一个按钮,再加点代码,就实现了在引导页面进入主页面的要求,剩下的就是加个轮播图放图片了

这里写图片描述

下边得就是按钮中要写的代码,加了一个action

@IBAction func ShowPage2View(sender: AnyObject) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        let viewPage2 = storyboard.instantiateViewControllerWithIdentifier("addNewPage") as! ViewPage2Controller

        self.presentViewController(viewPage2, animated: true, completion: nil)
    }

再弄一张启动图片放上去。

这里写图片描述

到这里,我要说的引导就完事了,在以后的博文中,我会再将这个例子细化,添加更多功能,争取完成一个app的博文,这个全工程代码就不上github了,以后会上,希望大家批评指正,10天ios新手的作品,大神轻喷。Barber_H

2018-09-28 01:06:57 FreakCoder_Lee 阅读数 873
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3672 人正在学习 去看看 许英俊

上周项目上线后出现一个奇怪的线上崩溃问题,写篇文章记录一下。

问题

系统为iOS9.0.2、iOS9.1、iOS9.2、iOS9.2.1的iPhone,通过App Store下载的,一启动程序就会闪退,但是在模拟器上或者真机debug模式相同系统版本的情况下也不会闪退。我们的项目环境为:Xcode9、Objective-C、Target iOS8.0及以上。

日志

下面列举几个常见的日志:

1、UIKit: -[UINibStringIDTable lookupKey:identifier:] + 132

	UIKit: -[UINibStringIDTable lookupKey:identifier:] + 132

UINibStringIDTable
2、UIKit: UINibDecoderDecodeObjectForValue + 788

UIKit: UINibDecoderDecodeObjectForValue + 788

UINibDecoderDecodeObjectForValue
3、CoreUI: -[CUIStructuredThemeStore renditionWithKey:usingKeySignature:] + 1600

CoreUI: -[CUIStructuredThemeStore renditionWithKey:usingKeySignature:] + 1600

CoreUI: -[CUIStructuredThemeStore renditionWithKey:usingKeySignature:] + 1600
4、libcache.dylib: _entry_get_optionally_checking_collisions + 164

libcache.dylib: _entry_get_optionally_checking_collisions + 164

libcache.dylib: _entry_get_optionally_checking_collisions + 164
5、FrontBoardServices: -[FBSSerialQueue _performNext] + 192

FrontBoardServices: -[FBSSerialQueue _performNext] + 192

FrontBoardServices: -[FBSSerialQueue _performNext] + 192
6、QuartzCore: CA::Context::commit_transaction(CA::Transaction*) + 340

QuartzCore: CA::Context::commit_transaction(CA::Transaction*) + 340

QuartzCore: CA::Context::commit_transaction(CA::Transaction*) + 340

解决

经网上查阅资料,发现Apple Developer Forums 上有一个跟我们近乎一样的问题(Crashes on iOS 9.0.2, 9.2 and 9.2.1)线上IPA包的图片资源中有3张图片的DisplayGamut是P3形式的(kCGColorSpaceDisplayP3是iOS9.3及以后才支持)。按如下几步操作即可解决:
1、导出线上IPA包,找到其中的Assets.car文件。
2、利用assetutil命令行工具将Assets.car文件导出为json格式,在终端进入Assets.car文件所在的文件夹下输入以下命令:

	sudo xcrun --sdk iphoneos assetutil --info Assets.car > Assets.json

3、打开第二步生成的Assets.json文件,查找DisplayGamut或者ARGB-16,包含此类信息的图片就是这次闪退问题的罪魁祸首了。替换一下对应的图片重新打包发布即可。
Assets.json

尾声

虽然及时解决了这个崩溃问题,但是今天回头又看了下,发现网上有个类似的问题(Release版本只在iOS9.2及以下闪退),对比了下,又稍微有些区别——原博主的是显示的图片格式问题,而我们项目中的却不是。PS:原博文介绍了另一种通过脚本处理所有图片格式的方法,本文就不列出了。我们有三张问题图片:
DisplayGamut
但是在Xcode中查看Color Space是正常的,如下所示:
flash_on

flash_off
然后对比了正常图片的Color Space也是sRGB IEC61966-2.1。因此,给本人带来一个疑惑,有待进一步证实~

补充说明

国庆假后得知业出现了很多类似问题,不过是Xcode10的bug,Apple也给出了回应,Xcode10.1会解决这个bug。
Asset Catalog
解决方案可以参考高老师很忙的微博: 解决Xcode10打包iOS9.0-iOS9.2.1Crash的问题

参考资料

[1]、Crashes on iOS 9.0.2, 9.2 and 9.2.1
[2]、App crashes as release build on iPad/iPhone 6-iOS 9.2 - but debugging is fine
[3]、App crashes immediately on start up… Crash in iOS9 on release only through TestFlight or Store. Distributed with Xcode 8
[4]、Release版本只在iOS9.2及以下闪退

2017-07-08 12:39:00 weixin_30326745 阅读数 4
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3672 人正在学习 去看看 许英俊

在Finder状态下前往目录。快捷键:shift+command+G,填写路径/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
这里写图片描写叙述

点击前往⬇️
这里写图片描写叙述
这时候我们把资源包放在DeviceSupport目录以下,重新启动xcode就可以。

附下载地址:
iOS9.3 SDK:http://download.csdn.net/detail/yangbenben8866/9472139
iOS10.0 SDK:http://download.csdn.net/detail/yangbenben8866/9647464
iOS10.2 SDK:http://download.csdn.net/detail/yangbenben8866/9747032

转载于:https://www.cnblogs.com/yfceshi/p/7136440.html

2016-12-06 18:16:05 tom_zhangdd 阅读数 8828
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3672 人正在学习 去看看 许英俊

不知道为什么 当我的xcode升级8.0之后  然后最近有个需求是程序启动前要调用黑名单   我这边处理之后 但是会崩掉  崩溃日志会打印

*** Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3599.6/UIApplication.m:3679

invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.
libc++abi.dylib: terminate_handler unexpectedly threw an exception

刚开始我也是一脸懵逼,网上谷歌 也找不到原因。 最后问了公司的组长 解决了问题

解决办法:

//iOS9.0以后 苹果避免在进行跟试图之前 有复杂的操作  所以先设置一个空的跟试图
    self.window.rootViewController = [[UIViewController alloc] init];

加上这一句就可以了


- (void)blackList{
    
    //iOS9.0以后 苹果避免在进行跟试图之前 有复杂的操作  所以先设置一个空的跟试图
    self.window.rootViewController = [UIViewController new];
    
    NSString *phone = [[AppManager manager]getMyPhone];
    
    NSDictionary *head = @{@"tradeCode" : @"0046",
                           @"tradeType" : @"appService"};
    NSDictionary *body = @{@"mobilePhone" : phone};
    
    
    [[AFNetManager manager] postRequestWithHeadParameter:head
                                           bodyParameter:body
                                                 success:^(ResponseModel *object) {
                                                     
                                                    //成功  在白名单内
                                                     LoginViewController *login = [[LoginViewController alloc]init];
                                                     Nav *navigation = [[Nav alloc]initWithRootViewController:login];
                                                     [self.window setRootViewController:navigation];
                                                     
                                                     MainTabBarController *main = [[MainTabBarController alloc]init];
                                                     [main.tabBarController setSelectedIndex:1];
                                                     [login presentViewController:main.tabBarController
                                                                         animated:NO
                                                                       completion:nil];
                                         
                                                 } fail:^(ErrorModel *error) {
                                                     
                                                     LoginViewController *login = [[LoginViewController alloc]init];
                                                     Nav *navigation = [[Nav alloc]initWithRootViewController:login];
                                                     [self.window setRootViewController:navigation];

                                                 }];

    
}

#pragma mark - 打开App
- (void) openApp {
    
    if ([[AppManager manager] isOnline]) {
        
        //调用黑名单
        [self blackList];

    } else {
        LoginViewController *login = [[LoginViewController alloc]init];
        Nav *navigation = [[Nav alloc]initWithRootViewController:login];
        [self.window setRootViewController:navigation];
    }
}

2016-06-28 14:40:03 wakice 阅读数 1565
  • iOS开发-全面解析iOS蓝牙BLE4.0开发

    只要你会OC基础,会写HelloWorld,你就可以实现iOS的蓝牙通信功能,实现蓝牙小项目也不在话下,作者会带领大家详细分析BLE4.0原理,通过分析xcode使用的蓝牙API,让学者能够得心应手的实现蓝牙BLE4.0的开发

    3672 人正在学习 去看看 许英俊

iOS9.0 LaunchScreen.StroyBoard自定义启动图片

2016-05-07 11:28

xcode7.0之前都是launchScreen.xib,在xcode7.0后苹果更改启动视图控件。

今天就简单介绍一下怎么适配iOS8和iOS9的app启动图片。

如果你做过app,就会知道当程序运行时如果没有启动图片,会有一段时间手机是黑屏的。

这就会给用户造成很差用户体验(app是运行了还是卡死机了)。

所以在此强烈建议设置启动图片,你可以在启动图片的视图展示产品或者与产品相关的广告,也可以添加动画了,分页效果了,也可以点击跳转界面等。

下面开始简单介绍一下怎么适配吧!

如果你只是设置一个静态启动图片的话,把原来的LaunchScreen.StroyBoard删除,

1.点击你的项目,进入targets

iOS9.0 LaunchScreen.StroyBoard自定义启动图片0

2.删除launchScreen.StroyBoard.

iOS9.0 LaunchScreen.StroyBoard自定义启动图片1

3.在launch images Source中创建新的来源,然后删除image.xcassets文件

iOS9.0 LaunchScreen.StroyBoard自定义启动图片2

iOS9.0 LaunchScreen.StroyBoard自定义启动图片3

3.1 删除新建的文件

iOS9.0 LaunchScreen.StroyBoard自定义启动图片4

4.在Assets.xcassets创建launchScreenImage

iOS9.0 LaunchScreen.StroyBoard自定义启动图片5

5.在targets中选择launchScreen

iOS9.0 LaunchScreen.StroyBoard自定义启动图片6

6.最后你就还可以在launchimage中添加你喜欢的格式正确的图片了

在此适配图片就可以了。

后期我会根据需求添加怎么获取启动界面的控制器view,怎么在launchScreen.StoaryBoard中展示动画,点击跳转界面。

没有更多推荐了,返回首页