2013年9月3日 星期二

【iOS】Draw 高解析 Image


米布我很喜歡用組合的方式畫圖…

最近有個很大的難題…

就是畫出來的圖都有很醜的毛邊,看起來就很不美觀 =  =

嘿嘿~

還好我找出解答了!!!

就是在  UIGraphicsBeginImage 這邊動個小手腳~解答如下:


UIGraphicsBeginImageContextWithOptions(imageSize, NO, [[UIScreen mainScreen] scale]);

依照讀取到機器的DPI的大小來決定是否要將圖的解析度調高~


  1. 完全不用管收到的圖是@1x還是@2x
  2. 利用最低的@1x就可以達到@2x的效果
  3. 也可以客製圖的解析度 (提醒:解析度太高,可是會讓機器跑不動而造成crash)

整個就大大的縮減圖在專案的負擔~

哈,是不是很棒呢~

2013年7月23日 星期二

【Cocos2D】錯誤修改 -'Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES'

撰寫軟體:cocos2D
軟體版號:cocos2d-iphone-1.1-RC0
程式版型:cocos2d_chipmunk

錯誤顯示:

'Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES'

修改方法:


// these methods are needed for iOS 6
#ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000

-(NSUInteger)supportedInterfaceOrientations{
    //Modify for supported orientations, put your masks here, trying to mimic behavior of shouldAutorotate..
    /*
    #if GAME_AUTOROTATION==kGameAutorotationNone
    return UIInterfaceOrientationMaskPortrait;
    #elif GAME_AUTOROTATION==kGameAutorotationCCDirector
    NSAssert(NO, @"RootviewController: kGameAutorotation isn't supported on iOS6");
    return UIInterfaceOrientationMaskLandscape;
    #elif GAME_AUTOROTATION == kGameAutorotationUIViewController
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
    //for both landscape orientations return UIInterfaceOrientationLandscape
    #else 
    #error Unknown value in GAME_AUTOROTATION
#endif // GAME_AUTOROTATION
     */
    return UIInterfaceOrientationMaskAll;

}

2013年5月29日 星期三

【iOS】UISplitViewControl

      米布最近的專案有需要用到SildBar的功能…還好的是寫iPad版的,它有現有的套件"UISplitViewcontrol",但爬了好多文發現這個元件是寫在Window底下的(天啊!!!)

      意思就是…使用者一開始看到的畫面是…


     但我的專案是需要"登錄->內容(UISplitViewControl)"…

     經過多方努力…終於找到了,實驗之後是可以使用的喔。開放程式碼如下:


    當然前提是要先產生這些頁面,其實只要叫Xcode生成好後(也就是開一個新的且以UISplitViewControl為底的專案…程式碼就可以不用自已寫了),copy到自已定義的ViewController就好,整個就方便多了。

    但現在還沒寫到回原來的登錄頁,等寫好後上來分享!!!!

2013年5月27日 星期一

【iOS】錯誤修改 - PCH file built from a different branch




     米布現在有很多專案是需要將之前iOS6之前的版本,現在都一一的要改成新舊版都可以符合的。
     
     剛好遇到這個問題  "PCH file built from a different branch"

     其實不用太擔心啦,這個只要清空專案就可以了(command + shift + K)即可。好像是之前所Bulid的資料還在,且和現在的Xcode有衝突到,所以…只要清空重跑就可以啦~



2013年5月21日 星期二

【API】Google Admob

目前版本 : 6.4.1

目前使用之 iOS版號:ios 6.1

Admob申請網址:http://www.google.com.tw/ads/admob/



     最近米布要改前輩的程式時,發現舊版的Admob不相容現在的ios版號(真是晴天霹靂)。順便來寫寫改善文…


     原來是要先更新SDK,網路上現在很多都可以下載了喔。

     米布下載的位置為:https://developers.google.com/mobile-ads-sdk/


     下載完畢後,如果只是要像之前一樣…那就只需copy這些檔案就可以了。



     嘿嘿,但還沒結束…

     米布利用新的專案來和大家聊聊會出錯的部分需要加入什麼Framework...

     一開始什麼都不加的話會有錯誤如下:


     還真是嚇人的錯誤(汗)…

     1."_AudioServicesPlaySystemSound"

            加入AudioToolbox.framework就可解決。

     2."_OBJC_CLASS_$_MFMailComposeViewController"
        "_OBJC_CLASS_$_MFMessageComposeViewController"  

            加入MessageUI.framework就可解決。

     3."_SCNetworkReachabilityCreateWithName"
        "_SCNetworkReachabilityScheduleWithRunLoop"
        "_SCNetworkReachabilitySetCallback"
        "_SCNetworkReachabilityUnscheduleFromRunLoop"

            加入SystemConfiguration.framework就可解決。

-------------------------------這要新的文件才會告知使用者-------------------------------

     4."_OBJC_CLASS_$_SKStoreProductViewController"
        "_SKStoreProductParameterITunesItemIdentifier"  

            加入StoreKit.framework就可解決。

     5."_OBJC_CLASS_$_ASIdentifierManager"  

            加入AdSupport.framework就可解決。

     以後就不用加了一堆的framework,且以上4、5是使用者很容易miss沒加到的地方,如果還有需要Admob其他功能,要麻煩各位再爬一下文吧。


     所以我的專案就可以work了(灑花)~~

2012年8月30日 星期四

【API】Google Weather API 停止服務

話說…

大家最愛用的Google Weather API ,因iGoogle停止服務的關係,也跟著被停…

詳情請看   It appears Google has quietly killed its weather API

唉…這麼好用又免費的API…真的是可惜了

(雖然天氣預報不是很準… =  =)

但它真的很好上手,很適合新手使用…

為了米布維護的專案…

米布又找到了一個免費的 Weather API - World Weather Online

因為它簡單又好用…所以就不貼圖啦!

只要註冊好一個API key就可以生出一段URL

就可以用這個產生出來的URL開始解析相關資料了。

輸出的格式目前只有三種:XML、JSON、CSV

到時候就看各位怎麼選擇了…

再附上相關的world weather online 提供的 icon資訊


【iOS】NSString & NSMutableString

資料來源:NSString Class Reference  & NSMutableString Class Reference

NSString

類型:物件

NSMutableString 和它是延伸關係



兩者不同性:

     差就差在彈性度。

    NSString 一但放入內容了,就無法直接做更改變動;相較之下,NSMutableString就沒有太大的問題。

    NSString如果內容要做更動的話,只能用NSString(舊,未處理) = NSString(新,已處理)做覆蓋的動作,而不是NSMutableString直接增加、刪除、修改字元。

相關應用:

切割字串

    米布比較常用有以下四種寫法,其實它不止四種,有需要其他寫法的,可以到Apple Class Reference 上做查詢。

- (NSString *)substringWithRange:(NSRange)aRange

- (NSString *)substringFromIndex:(NSUInteger)anIndex

- (NSString *)substringToIndex:(NSUInteger)anIndex

以上三種簡單來說就是 - 取某一區域的字。

範例字串:NSString *tmp_str = @"ABCDEFG";

substringWithRange就是取特定區域

例:
NSString *result_str = [tmp_str substringWithRange:NSMakeRange(2,3)];

結果為 result_str = @"CDE";


substringFromIndex就是截取從字元位置開始一直取到最後
例:
NSString *result_str = [tmp_str substringFromIndex:3];

結果為 result_str = @"DEFG";

substringToIndex就是頭截取到你定義的字元位置

例:
NSString *result_str = [tmp_str substringToIndex:3];

結果為 result_str = @"ABC";




另外,還有一種很方便的方法來做字串的切割!!!這種很適合用於陣列資料轉字串,再轉回陣列所用。


- (NSArray *)componentsSeparatedByString:(NSString *)separator

範例字串:NSString *tmp_str = @"AB|CDE%FG";

NSArray *result_ary = [tmp_str componentsSeparatedByString:@"|"];

結果為 result_ary = {@"AB",@"CDE%FG"};

看出來了嗎!!!

它利用特定符號來做切割的動作,要是之前用一個for迴圈將NSArray的內容用一個符號串成字串,就不怕資料儲存不易,加上用這個來做還原,是不是很棒啊!!!!