2012年12月23日 星期日

iOS 6 畫面旋轉小技巧

目前為了要相容 iOS 5 和 6 的旋轉,在原本的旋轉方法下,還要加入以下方法。

viewController.mm
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
//僅支援直式
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

-(NSUInteger)supportedInterfaceOrientations
{
//僅支援直式
return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotate
{
return YES;
}


以為解決了,結果在 AppDelegate.m 下用

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.window.rootviewcontroller = navigationController;

這下可好,完成不理之前的設定(僅支援直式),變成任意旋轉了@_@|||
查了查才發現 self.viewController 是 UIViewController,而被加入 UINavigationController ,旋轉設定並無法影響,解決方法有兩種:
1. 改 UIViewController 為 UINavigationController 的子類別
2. 直接在 AppDelegate.m 覆寫 supportedInterfaceOrientations 方法,如下所示:

@implementation UINavigationController (iOS6OrientationFix)

-(NSUInteger) supportedInterfaceOrientations
{
//被加入的 viewController 為最上層,故只取 topViewController
return [self.topViewController supportedInterfaceOrientations];
}

@end

參考來源:
http://stackoverflow.com/questions/12410031/ios-6-rotations-supportedinterfaceorientations-doesnt-work
http://stackoverflow.com/questions/12504464/ios-6-uitabbarcontroller-supported-orientation-with-current-uinavigation-control


好了,打完收工!

2012年9月3日 星期一

[AR] 想訂購一個窗戶嗎?

國外一間公司(VELUX)運用 AR 來展示商品的應用,主打商品是"窗戶",讓使用者可直接在家中透過相機即可將各式各樣的窗戶選擇來搭配,並可進一步分享至 facebook 與好友討論,最後當然可以打開 google map 查詢販售地點,直接打電話去訂購等等...


[AR] 導入 qr-code 在廣告上的應用

一個運用 qr-code 及 ar 來展示廣告及連結商品購買的影片,有 ios 及 android 版本。


2012年8月31日 星期五

[iOS] 發送 Local Notification 方法小記

最近剛研究完 Apple Push Notification Service (APNS) 來發送訊息給 user device。
有空再來整理整個設定流程,今天同事討論到也有直接本機發送的方式,上網找了一下寫個函式記錄以方便使用。

- (void)pushLocalNotification:(NSDate *)date
{
    //直接抓取目前時間後1分鐘

    //NSDate *after = [NSDate dateWithTimeIntervalSinceNow:(1 * 60)];

    //若有舊訊息則把它刪除
    NSArray *oldNotificatoins = [application scheduledLocalNotifications];
    if([oldNotificatoins count] > 0)
        [application cancelAllLocalNotifications];

    //建立一個訊息來發送
    UILocalNotification *alarm = [[[UILocalNotification alloc] init] autorelease];
    if(alarm)
    {
        alarm.fireDate = date;
        alarm.timeZone = [NSTimeZone defaultTimeZone];
        alarm.repeatInterval = 0;
        alarm.soundName = @"beep-beep.caf";
        alarm.alertBody = @"test local notification message!";
        [application scheduleLocalNotification:alarm];
    }

}

2012年8月30日 星期四

[iOS] 將輸入框 (UITextField) 收起的方法

每次使用 UITextField 來讓使用者輸入文字,但在收起來這件事總是不少麻煩。
記錄一下幾個收起的方法:

1.實作 UITextFieldDelegate 的函式在按下確定 (Return、Done) 後收起

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];

    return YES;
}


2.手指點擊畫面後收起

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleBackgroundTap:)];
tapRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tapRecognizer];

- (void)handleBackgroundTap:(UITapGestureRecognizer *)sender
{
    [textField resignFirstResponder];
}

2012年8月28日 星期二

[iOS] 內建 UIAlertView 顯示輸入框的方法


常常使用 UIAlertView 來顯示一些告知使用者訊息的功能,但在登入或需要使用者輸入一些欄位時(ex:密碼)可用以下的方法來呈現:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"title" message:@"" delegate:self cancelButtonTitle:@"Yes" otherButtonTitles:nil];
[alertView setAlertViewStyle:UIAlertViewStylePlainTextInput];
UITextField *textField = [alertView textFieldAtIndex:0];
[alertView show];

紅色字的部份可參考以下的列舉使用。

typedef enum {
    UIAlertViewStyleDefault = 0,
    UIAlertViewStyleSecureTextInput,
    UIAlertViewStylePlainTextInput,
    UIAlertViewStyleLoginAndPasswordInput
} UIAlertViewStyle;

2012年8月23日 星期四

[iOS] 判斷 app 是第一次打開或更新版本後第一次打開的方法

最近在找怎麼判斷 app 是第一次打開或更新版本後第一次打開的方法,這個可用來製作首次操作教學的提示,網路(參考連結)上有好心人教學,程式碼如下:


- (BOOL)isFirstLoad
{
    NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *lastRunVersion = [defaults objectForKey:LAST_RUN_VERSION_KEY];
    
    if(!lastRunVersion)
    {
        [defaults setObject:currentVersion forKey:LAST_RUN_VERSION_KEY];
        NSLog(@"第一次打開 App");
        
        return YES;
    }
    else if (![lastRunVersion isEqualToString:currentVersion])
    {
        [defaults setObject:currentVersion forKey:LAST_RUN_VERSION_KEY];
        NSLog(@"更新版本後第一次打開 App");
        
        return YES;
    }
    
    //記得一定要呼叫此函式才會永久儲存
    [defaults synchronize];
    
    return NO;
}

2012年8月16日 星期四

[iOS] 使用 UIActionSheet 時,取消按鈕感應範圍小記

在使用 UIActionSheet 時,發現取消按鈕的感應範圍整個偏上一點。
拜讀 google 大神後,從 連結 中找到了解答,原來是有使用 UITabBarController 的緣故,因此要改用 [UIApplication sharedApplication].keyWindow 來取代 self.view 即可。

[Mac] Firefox 使用內建字典外掛

在 safari 有內建功能可以快速打開字典查詢,沒想到 firefox 無此功能,網路上找到一個外掛使用後就可以啦!
就叫 Look Up in Dictionary

[Mac] Lion 下使用網路郵局之 java 設定

最近開通了網路郵局後,發現用 safari 打開網頁後都出現電腦尚未安裝 java 的怪現象。
我明明就有裝了說,結果發現原來要打開外掛才行,然後重開 safari 就大功告成。
來個 java 測試網頁

[iOS] 設定多國語系無法正常顯示小記

這陣子忙著寫第一個 iPhone 版本的 app,終於要上架了!(撒花)
雖然一開始鎖定繁中語系,不過 app 的主要市場在北美,
因此就要做個多國語系啦,在設定時,很多教學都提到直接使用 NSLocalizedString 函式即可。但我發現一直無法正常顯示,結果最近在一篇文章中提到,NSLocalizedString 函式預設是依照 Localizable.strings 檔案去設定,但若檔名有自行更改...就不會理你了。
因此,若自行更改檔名,就要改用 NSLocalizedStringFromTable(@”title”,@”檔名”, nil)  函式來解決,打完收工。

2012年6月25日 星期一

[iOS] 設定 UITabBar 隱藏


隱藏 - 在 [self.navigationController pushViewController:animated:] 之前設定
self.hidesBottomBarWhenPushed = YES;

顯示 - (void)viewWillDisappear:(BOOL)animated
self.hidesBottomBarWhenPushed = NO;

[iOS] 設定 UINavigationBar 透明度


打開 - (void)viewWillAppear:(BOOL)animated
self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.alpha = 0.7f;

關閉 - (void)viewWillDisappear:(BOOL)animated
self.navigationController.navigationBar.translucent = NO;
self.navigationController.navigationBar.alpha = 1.0f;

2012年5月5日 星期六

[iOS] NSLog 印不出中文字

發現在 xcode 更新後,nslog 原本印中文好好的卻出現什麼屁都印不出還連顯示都沒有。
網路找了一下才發現,原來 debugger 被改成 lldb 的緣故,只要改回 gdb 就一切良好!

2012年1月13日 星期五

Manga Director 小記

話說從去年中接手這個系統後,也做了半年多(中間1個月還跑去成功嶺受訓)。
有了點小成果,預計農曆年後上線給使用者玩看看,做個簡介記錄一下: 


1. 整合 Facebook 帳號登入及匯入相簿和完成漫畫繪本上傳。
2. 匯入各大網路相簿(無名、痞客邦、Flickr、隨意窩Xuite、Picasa)之照片素材。
3. 自動為匯入之照片權重評分(依據臉部辨識、連續拍攝、ISO等)。
4. 自動依需求產生漫畫形式之繪本。
5. 簡易編輯功能(畫格、文字、小圖示)。
6. 發佈至一般網頁或分享至 Facebook 塗鴨牆、Twitter 及 Plurk。


PS:由於階段性任務完成,之後就交接給新人接力啦!