Just My Life & My Work

Archive for 四月, 2015

[iOS] 可可豆莢多目標 (Cocoapods with Multiple Targets)

隨著時間發展,iOS App已經變得更加複雜且龐大,使用使用 CocoaPods 管理第三方套件已成為必要之事,然而這樣還是不夠,因為我們一個專案 (Project)中不再只是一個目標 (Target),這些目標都需要同一個函式庫 (Library),但是可可豆莢 (Cocoapods)預設只為最初的那個目標,我們該怎麼下指令才能讓所有目標都能引用同一函式庫呢?

cocoapods13

原來只要多加link_with關鍵字,後頭接上目標的名稱即可!

/**
 Theme: Podfile with Multiple Targets
 IDE: Xcode 6
 Language: Objective C
 Date: 104/04/01
 Author: HappyMan
 Blog: https://cg2010studio.wordpress.com/
 */
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '6.0'

link_with 'HappyCan', 'HappyCan Today', 'HappyCan WatchKit Extension'

pod 'AFNetworking'
pod 'ZBarSDK'
pod 'Toast', '~> 2.4'
pod 'LineKit', '~> 1.4.1'
pod 'MBProgressHUD'
pod 'OpenSSL-Universal', '1.0.1.k’

以上範例表示我專案中有三個目標(HappyCan、HappyCan Today、HappyCan WatchKit Extension),都需要引用相同的函式庫。

參考:What is a Podfile?

[iOS] HTML的CSS轉為NSAttributedString

曾經以為TextFieldTextView裡的字只能統一屬性來顯示,從iOS 6開始它們都有了attributedText這個屬性,之後可以在字體間顯示不同的效果。

@property(nonatomic,copy)   NSAttributedString     *attributedText NS_AVAILABLE_IOS(6_0); // default is nil

現在我們想更進一步知道,如何將HTML的CSS轉為NSAttributedString,之後看到網頁排版漂亮,就可直接拿來套用!

這是html呈現的字樣~

CSS to NSAttributedString - web

此外,可參考先前介紹的文章:多重文字屬性 (Multiple Text Attribute)LABEL裡的行距LABEL裡的字距

(繼續閱讀…)

台灣超級鐵人二項成績

第一次參加台灣超級鐵人二項,就有不錯的成績,真令人開心!之所以會參加,是被阿芳拖去報名,原以為只是玩遊戲的比賽,但聽到要在2小時內騎自行車45公里,開始覺得好像挺不容易,當時還想騎小折Ubike去參賽,可真是單純哪~真的也實際去嘗試老弟的小折,想要騎到時速25公里,不是不可能,但想要撐兩小時,只能說做夢吧~

台灣二鐵 英雄路跑2

同一天兩場賽事:上午台灣超級鐵人(右),下午超級英雄路跑(左)!

下午的英雄路跑有媒體採訪:運動到上電視

(繼續閱讀…)

[iOS] 包含字串 (Contains String)

程式語言會隨著時間進化。本次專案依然會處理字串,我自己定義字串來區別用途,想知道是否包含字串 (Contains String),iOS 7以前的作法很拐彎抹角,我是查詢StackOverflow才知道,而且不是查詢一次就記起來,可見這支NSString的method有多不直覺!

iOS 8以後,就可以用「包含」這個方法:

containsString

我很自然地就使用它,在iPhone 6/6+跑都沒問題,因為一買來就是iOS 8。直到夥伴大鳥跟我說,用它iPhone 5一跑就崩潰,後來得知它手機還是iOS 7,就在想是那支method有問題。答案揭曉⋯⋯

/**
 Theme: Contains String
 IDE: Xcode 6
 Language: Objective C
 Date: 104/03/31
 Author: HappyMan
 Blog: https://cg2010studio.wordpress.com/
 */
/* containsString: returns YES if the target string is contained within the receiver. Same as calling rangeOfString:options: with no options, thus doing a case-sensitive, non-literal search. localizedCaseInsensitiveContainsString: is the case-insensitive variant. Note that it takes the current locale into effect as well.  Locale-independent case-insensitive operation, and other needs can be achieved by calling rangeOfString:options:range:locale: directly.
 */
- (BOOL)containsString:(NSString *)aString NS_AVAILABLE(10_10, 8_0);

//--

/* These methods return length==0 if the target string is not found. So, to check for containment: ([str rangeOfString:@"target"].length > 0).  Note that the length of the range returned by these methods might be different than the length of the target string, due composed characters and such.
*/
- (NSRange)rangeOfString:(NSString *)aString;

//--

    NSString *str;
    if ([str rangeOfString:@"HappyDay"].location != NSNotFound) {
        // iOS 7以前拐彎抹角
    }

    if ([str containsString:@"HappyDay"]) {
        // iOS 8以後可以很開心
    }

把method的名稱設計得很直覺,真的是件好事呀~

參考:。

運動到上電視

青年節的前一天3/28,我在這一天參加了兩場運動賽事,上午在成蘆橋挑戰台灣鐵人二項,下午在光復橋參與超級英雄路跑。其中後者吸引數家媒體來採訪,因為電影復仇者聯盟二奧創紀元在下個月就要上映!

我們125超慢跑成員們很有活力地打扮成各大英雄,在做熱身的時候TVBS電視台攝影師靠了過來,大概是看到我們熱情非凡,能夠在電視中當個吸引觀眾的角色:)~

英雄路跑 Hero Super Run

暖身後合照

英雄路跑 Hero Super Run 2

開跑第三分鐘

短短十秒鐘路跑鏡頭,就有兩次帶到我們125超慢跑成員!可以見到報導影片中1:56-1:58,我想說怎麼會那麼巧,攝影大哥真是有眼光哪XD~

(繼續閱讀…)

標籤雲