[iOS] 播放Youtube影片2
先前提到可以用Web View來播放Youtube影片,現在我們可以更輕易地播放Youtube影片囉~只要使用第三方套件XCDYouTubeKit,就可以透過內建的MPMoviePlayerViewController來播放影片!
來用今年員工旅遊在韓國首爾空中滑翔到南怡島的影片做測試吧~
先前提到可以用Web View來播放Youtube影片,現在我們可以更輕易地播放Youtube影片囉~只要使用第三方套件XCDYouTubeKit,就可以透過內建的MPMoviePlayerViewController來播放影片!
來用今年員工旅遊在韓國首爾空中滑翔到南怡島的影片做測試吧~
不曉得為何要把Placeholder翻成佔位符,不過仔細想也有其道理。常用TextField的Placeholder,在還沒開始要輸入文字前,會有預設文字在TextField中,當我們點下去要開始輸入文字,Placeholder就被清空了!表示其實那些字只是佔位置用啦~
我現在最常用的影像處理App是Instagram,一直想知道它的濾鏡是怎麼做出來,所以先前研究Instagram濾鏡,如今總算讓我有機會自己玩影像處理的程式!才發現原來iOS SDK已經有許多現成的濾鏡可以隨意取用,我就不用再去研究演算法如何如何~
於是乎,我做了一個App來玩,就像Instagram那樣子~
在Scroll View上翻頁(Paging)似乎只能根據Scroll View這個元件的大小來決定,然而今日我有需求來改變其翻頁的大小,該如何做呢?
有神人這麼建議⋯⋯
clipsToBoundsUIView over the scrollview, wherever you want the user to be able to touchpanGestureRecognizer to that view
[touchableView addGestureRecognizer:_scrollView.panGestureRecognizer];
如果只是縮小Scroll View,且讓其上的元件不被切掉(第一點),那麼觸控範圍只有在被縮小Scroll View上頭,這樣不太合理,那麼我們就希望讓兩邊空白處也能觸控Scroll View。神人建議可以將panGestureRecognizer轉移共用,在Scroll View底下鋪View,將Scroll View的panGestureRecognizer設定到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);
更新到了Xcode 6,新建立的專案不再預設.pch檔,之前都將時常用到的class放置.pch檔,讓專案下所有的class都能引用,如今Xcode 6取消預設,我們該怎麼自行建立?
我們可以看到Xcode 5所預設建立的.pch檔位置在專案檔的下一層,路徑就找到囉~
以繁體中文(因為是母語喲!)為主來做多國語言化,另外兩個語言是簡體中文和英文,跟著多國語系 (Localization)這篇文章做,照理說已經沒有其它問題,但是呢⋯⋯若哪天日本人想用這個App,那麼他會看到哪個語言?實際跑過發現是偉大的繁體中文,然而我們的期望卻是套用英文,這時候該怎麼辦呢?打掉重練?噢~不。
有時候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
一個能夠跨國際使用的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
跟程式裡的字串做多國語言化(Localization)不一樣,要讓App顯示名稱多國語言化 (Bundle Display Name Localization)必須經由別的做法,可以找尋檔案列表中InfoPlist.strings,在IDE右側界面「Localization」打勾所需的語系,即會出現我們想要的語系檔案如下。
分別在三個檔案內加入各語系想顯示的名稱即可!就是以Key-Value的方式設定。
/* Localized versions English of Info.plist keys */ "CFBundleDisplayName" = "HappyMan"; /* Localized versions Chinese Simplified of Info.plist keys */ "CFBundleDisplayName" = "逍遥文"; /* Localized versions Chinese Tradition of Info.plist keys */ "CFBundleDisplayName" = "逍遙文";
HappyMan・迴響