版本記錄
| 版本號 | 時間 |
|---|---|
| V1.0 | 2017.06.28 |
前言
在app中,我們很多時候需要在內(nèi)網(wǎng)和外網(wǎng)之間進行切換,也需要在外部測試服務(wù)器和外部生產(chǎn)服務(wù)器之間進行切換。這一篇,就仿照實現(xiàn)頭條的模糊效果。感興趣的可以看看我寫的其他小技巧。
1. 實用小技巧(一):UIScrollView中上下左右滾動方向的判斷
2. 實用小技巧(二):屏幕橫豎屏的判斷和相關(guān)邏輯
3.實用小技巧(三):點擊手勢屏蔽子視圖的響應(yīng)
4.實用小技巧(四):動態(tài)的增刪標(biāo)簽視圖
5.實用小技巧(五):通過相冊或者相機更改圖標(biāo)
6.實用小技巧(六):打印ios里所有字體
7. 實用小技巧(七):UITableViewCell自適應(yīng)行高的計算
8. 實用小技巧(八):數(shù)字余額顯示的分隔
9.實用小技巧(九):類頭條模糊背景的實現(xiàn)
實現(xiàn)目標(biāo)
在app中,我們很多時候需要在內(nèi)網(wǎng)和外網(wǎng)之間進行切換,也需要在外部測試服務(wù)器和外部生產(chǎn)服務(wù)器之間進行切換。這里我們就說一下晃動手機切換服務(wù)器的方法。
實現(xiàn)過程
下面我們就直接看代碼即可。
//在登錄界面
1.JJLoginVC.h
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
NSUserDefaults * userDefault = [NSUserDefaults standardUserDefaults];
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"切換服務(wù)器" message:[JJAppInfo shareAppInfo].currentServerTypeString preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction * reBoServerAction = [UIAlertAction actionWithTitle:@"正式服務(wù)器" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
DDLogVerbose(@"正式");
[userDefault setObject:@0 forKey:kServerType];
[userDefault synchronize];
exit(0);
}];
UIAlertAction * testServerAction = [UIAlertAction actionWithTitle:@"測試服務(wù)器" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
DDLogVerbose(@"測試");
[userDefault setObject:@1 forKey:kServerType];
[userDefault synchronize];
exit(0);
}];
UIAlertAction * onlineTestServerAction = [UIAlertAction actionWithTitle:@"線上測試服務(wù)器" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
DDLogVerbose(@"線上測試");
[userDefault setObject:@2 forKey:kServerType];
[userDefault synchronize];
exit(0);
}];
UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel") style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
}];
[alertController addAction:reBoServerAction];
[alertController addAction:testServerAction];
[alertController addAction:onlineTestServerAction];
[self presentViewController:alertController animated:YES completion:nil];
}
//這個類存儲app的基本信息
2. JJAppInfo.h
#import <Foundation/Foundation.h>
typedef NS_ENUM(NSInteger, NSSeverUrlType) {
NSSeverUrlTypeOnline,
NSSeverUrlTypeOnlineTest,
NSSeverUrlTypeTest,
};
@interface JJAppInfo : NSObject
#pragma mark - serverl
@property (nonatomic, strong) NSString *serverUrl;
@property (nonatomic, strong) NSString *payUrl;
@property (nonatomic, strong) NSString *chatUrl;
- (void)switchServerUrl:(NSSeverUrlType)serverType;
- (NSString *)currentServerTypeString;
//單例
+ (instancetype)shareAppInfo;
+ (BOOL) isLogin;
+ (void) clearTmpCache;
@end
3. JJAppInfo.m
#import "JJAppInfo.h"
@implementation JJAppInfo
#pragma mark - 單例
+ (instancetype)shareAppInfo
{
static JJAppInfo *appInfo;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
appInfo = [[JJAppInfo alloc] init];
});
return appInfo;
}
+ (BOOL) isLogin
{
if ([JJConfig myProfile].token == nil) {
return NO;
} else {
return YES;
}
}
#pragma mark - ServerUrl
- (NSString *)serverUrl
{
if (!_serverUrl) {
_serverUrl = kOnlineserverUrl;
}
return _serverUrl;
}
- (NSString *)payUrl
{
if (!_payUrl) {
_payUrl = kOnlinePayUrl;
}
return _payUrl;
}
- (NSString *)chatUrl
{
if (!_chatUrl) {
_chatUrl = kOnlineChatUrl;
}
return _chatUrl;
}
- (void)switchServerUrl:(NSSeverUrlType)serverType
{
//選擇服務(wù)器
switch (serverType) {
case 0:
//正式服務(wù)器
_serverUrl = kOnlineserverUrl;
_payUrl = kOnlinePayUrl;
_chatUrl = kOnlineChatUrl;
break;
case 1:
//測試服務(wù)器
_serverUrl = ktestserverUrl;
_payUrl = ktestPayUrl;
_chatUrl = ktestChatUrl;
break;
case 2:
//預(yù)發(fā)布服務(wù)器
_serverUrl = kOnlineTestserverUrl;
_payUrl = kOnlineTestPayUrl;
_chatUrl = kOnlineTestChatUrl;
break;
default:
_serverUrl = kOnlineserverUrl;
_payUrl = kOnlinePayUrl;
_chatUrl = kOnlineChatUrl;
break;
}
}
- (NSString *)currentServerTypeString
{
NSUserDefaults * userDefault = [NSUserDefaults standardUserDefaults];
NSSeverUrlType serverType = [[userDefault objectForKey:kServerType] integerValue];
NSString * serverStr;
switch (serverType) {
case NSSeverUrlTypeOnline:
serverStr = @"正式服務(wù)器";
break;
case NSSeverUrlTypeTest:
serverStr = @"測試服務(wù)器";
break;
case NSSeverUrlTypeOnlineTest:
serverStr = @"線上測試服務(wù)器";
break;
default:
serverStr = @"正式服務(wù)器";
break;
}
return [NSString stringWithFormat:@"當(dāng)前是: %@",serverStr];
}
+ (void) clearTmpCache
{
NSString *libPath = NSTemporaryDirectory();
// 實例化NSFileManager
NSFileManager *fileManager = [NSFileManager defaultManager];
// 獲取Caches文件夾下的所有文件及文件夾
NSArray *array = [fileManager contentsOfDirectoryAtPath:libPath error:nil];
// 循環(huán)刪除Caches下的所有文件及文件夾
for (NSString *fileName in array) {
[fileManager removeItemAtPath:[libPath stringByAppendingPathComponent:fileName] error:nil];
}
}
@end
//在app的launch方法里面
4. AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSUserDefaults * userDefault = [NSUserDefaults standardUserDefaults];
NSInteger serverType = [[userDefault objectForKey:kServerType] integerValue];
#ifdef DEBUG
[[JJAppInfo shareAppInfo] switchServerUrl:serverType];
#else
[[JJAppInfo shareAppInfo] switchServerUrl:NSSeverUrlTypeOnline];
#endif
DDLogWarn(@"服務(wù)器類型: %ld",(long)serverType);
//other code written here...
}
實現(xiàn)結(jié)果
下面我們看一下實現(xiàn)結(jié)果。

實現(xiàn)結(jié)果
可見,可以實現(xiàn)切換服務(wù)的功能,同時在網(wǎng)絡(luò)工具里面封裝好根地址,方便調(diào)試。
后記
未完,待續(xù)~~~~

冬之美