Just My Life & My Work

最近假油、混油、劣質油、餿水油、飼料油、任何不良的油等等鬧得沸沸揚揚,我想只要有嘴巴的人,都難逃這次的風波⋯⋯

然而一般人對油的認識並不多,巧遇聯合報製作的「你吃的油哪裡來」,讓我一窺「油」的世界!

豬油哪裡來

這麼多食物都含有豬油,都不曉得自己已經吃下多少有問題的油,實在太恐怖了~會不會吃素就能避免掉呢?市佔前幾名的正義、強冠、統清、南僑似乎都有問題?⋯⋯

畢竟若不降低成本,很難在市場上競爭,那麼就要怪罪消費者貪小便宜囉?我在想,無良的商人也能夠將劣質品包裝得相當漂亮,像二舅媽貼訊息給我看著名的林鳳營鮮乳,還有網友說原本喝鮮乳會拉肚子,但喝林鳳營鮮乳就不會拉肚子⋯⋯要是無良廠商有心想要賺大錢,昂貴的食品也會有問題的!

所以我們該怎麼做呢?讓自己更有經驗智慧,去辨別廠商的好壞吧!還有吃該吃的,不該吃的就儘量不要吃吧~

[iOS] 使用濾鏡 (Using Filter)

我現在最常用的影像處理App是Instagram,一直想知道它的濾鏡是怎麼做出來,所以先前研究Instagram濾鏡,如今總算讓我有機會自己玩影像處理的程式!才發現原來iOS SDK已經有許多現成的濾鏡可以隨意取用,我就不用再去研究演算法如何如何~

Using Filter2

使用濾鏡前

於是乎,我做了一個App來玩,就像Instagram那樣子~

繼續閱讀文章 »

看著許多部落客的介紹,今年我們員工旅遊去首爾,必去地之一就是南怡島囉!仔細看介紹後才知道,原來南怡島是韓劇冬季戀歌的拍攝場景之一,那麼肯定值得一去~

要不是愛冒險氾濫的老胡提議,我大概也只會搭乘渡輪前往南怡島,那也只要花8K韓幣。不過呢⋯⋯我就是想嘗試從空中滑翔到南怡島!結果花了38K韓幣,加上買了10K韓幣滑翔特寫,代價不菲呢!

幸好滑翔的過程都可以拍照錄影,讓我覺得高價消費也值得啦~我就冒著生命危險記錄怎麼雙腳懸空滑過去⋯⋯

繼續閱讀文章 »

在Scroll View上翻頁(Paging)似乎只能根據Scroll View這個元件的大小來決定,然而今日我有需求來改變其翻頁的大小,該如何做呢?

scroll view_

神人這麼建議⋯⋯

  1. turn off clipsToBounds
  2. put a UIView over the scrollview, wherever you want the user to be able to touch
  3. move the panGestureRecognizer to that view
    [touchableView addGestureRecognizer:_scrollView.panGestureRecognizer];

如果只是縮小Scroll View,且讓其上的元件不被切掉(第一點),那麼觸控範圍只有在被縮小Scroll View上頭,這樣不太合理,那麼我們就希望讓兩邊空白處也能觸控Scroll View。神人建議可以將panGestureRecognizer轉移共用,在Scroll View底下鋪View,將Scroll View的panGestureRecognizer設定到View上頭,這樣就大功告成!

scroll view

 

神人說這麼做,Apple是允許的,在WWDC的Session (WWDC Session 223, “Enhancing User Experience with Scroll Views)上有提到,Scroll View有兩個gesture recognizer,就是因為大家的期望而設計出來的,如此就能在非該Scroll View上的元件來移動縮放該Scroll View囉~

// Use these accessors to configure the scroll view’s built-in gesture recognizers.

// Do not change the gestures’ delegates or override the getters for these properties.

@property(nonatomic, readonly) UIPanGestureRecognizer *panGestureRecognizer NS_AVAILABLE_IOS(5_0);

// `pinchGestureRecognizer` will return nil when zooming is disabled.

@property(nonatomic, readonly) UIPinchGestureRecognizer *pinchGestureRecognizer NS_AVAILABLE_IOS(5_0);

參考:Changing the size of a paging scroll view

更新到了Xcode 6,新建立的專案不再預設.pch檔,之前都將時常用到的class放置.pch檔,讓專案下所有的class都能引用,如今Xcode 6取消預設,我們該怎麼自行建立?

前編譯標頭檔 Pre-Compile Header4

我們可以看到Xcode 5所預設建立的.pch檔位置在專案檔的下一層,路徑就找到囉~

繼續閱讀文章 »

[寫真] 大甲鴨舌草帽

緣由是由一位網友文生,描述自己曾經有一頂鴨舌草帽很愛不釋手,可惜在一趟搭飛機的行程弄丟了,於是他想要製作一頂一模一樣的鴨舌草帽,經過一兩週我跟媽媽討論卻不斷忘記跟阿嬤說的過程,最後還是由文生先生主動聯繫我家人,然後消息很快地就傳到我阿嬤的耳中囉~

鴨舌草帽1

繼續閱讀文章 »

繁體中文(因為是母語喲!)為主來做多國語言化,另外兩個語言是簡體中文英文,跟著多國語系 (Localization)這篇文章做,照理說已經沒有其它問題,但是呢⋯⋯若哪天日本人想用這個App,那麼他會看到哪個語言?實際跑過發現是偉大的繁體中文,然而我們的期望卻是套用英文,這時候該怎麼辦呢?打掉重練?噢~不。

Default (Fallback) Language of Localization

繼續閱讀文章 »

有時候server吐回來陣列元素的順序剛好跟我們所期望的相反,如想要[1,2,3,4,5],卻拿到[5,4,3,2,1]。

此時就需要做反序陣列元素 (Reverse Array)的動作。我們可以有兩種做法,一種是索引(index)由大到小存取陣列元素,一種是陣列元素前後對等交換(最左與最右,左數第二與右數第二,依此類推⋯⋯),下列程式碼實作後者,又分可變陣列(NSMutableArray)不變陣列(NSArray)

將程式碼放到.m檔裡即可使用,或是寫成類別來引用。


/**
 Theme: Reverse Array
 IDE: Xcode 6
 Language: Objective C
 Date: 103/10/14
 Author: HappyMan
 Blog: https://cg2010studio.wordpress.com/
 */
@implementation NSArray (Reverse)

- (NSArray *)reversedArray {
    NSMutableArray *array = [NSMutableArray arrayWithCapacity:[self count]];
    NSEnumerator *enumerator = [self reverseObjectEnumerator];
    for (id element in enumerator) {
        [array addObject:element];
    }
    return array;
}

@end

@implementation NSMutableArray (Reverse)

- (void)reverse {
    if ([self count] == 0)
        return;
    NSUInteger i = 0;
    NSUInteger j = [self count] - 1;
    while (i < j) {
        [self exchangeObjectAtIndex:i
                  withObjectAtIndex:j];

        i++;
        j--;
    }
}

@end

參考:How can I reverse a NSArray in Objective-C?

[iOS] 偏好語言 (Prefer Language)

一個能夠跨國際使用的App,需要多國語言化(Localization),之前介紹的是系統運行時自動轉換字串的語言,然而我們想要知道目前使用者的偏好語言 (Prefer Language),來做更進一步的運用,比如將語言碼當作參數傳遞。

/**
 Theme: Language
 IDE: Xcode 6
 Language: Objective C
 Date: 103/10/14
 Author: HappyMan
 Blog: https://cg2010studio.wordpress.com/
 */
    // 記錄語言碼
    NSString *languageStr = [[NSLocale preferredLanguages] objectAtIndex:0];
//    NSString *languageStr = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];

    if ([languageStr isEqualToString:@"zh-Hant"]) {// 繁中
        self.languageCode = @"2";
    }
    if ([languageStr isEqualToString:@"zh-Hans"]) {// 簡中
        self.languageCode = @"1";
    }
    if ([languageStr isEqualToString:@"en"]) {// 英語
        self.languageCode = @"0";
    }

有兩種用法可行,注意事項請看文件說明!

使用說明

+ (NSArray *)preferredLanguages NS_AVAILABLE(10_5, 2_0);
note that this list does not indicate what language the app is actually running in; the [NSBundle mainBundle] object determines that at launch and knows that information

@property (readonly, copy) NSArray *preferredLocalizations;
a subset of this bundle’s localizations, re-ordered into the preferred order for this process’s current execution environment; the main bundle’s preferred localizations indicate the language (of text) the user is most likely seeing in the UI

參考:Getting current device language in iOS?

想要將顯示在App上的聯絡人資料加入到通訊錄,但是不想要讓使用者自己到通訊錄一個字一個字慢慢打,這時候就可以用這些複雜的程式碼解決囉!

Address Book1

繼續閱讀文章 »

標籤雲