第一次網路報稅就上手
前不久才剛辦好自然人憑證,最主要的目的是要來報稅,於是乎在五月底的這個時候,我才「驚恐」地買了晶片讀卡機,上網搜尋前人的經驗,總算讓我這個習慣用Mac系統的工程師,順利完成2015年的報稅活動。
前不久才剛辦好自然人憑證,最主要的目的是要來報稅,於是乎在五月底的這個時候,我才「驚恐」地買了晶片讀卡機,上網搜尋前人的經驗,總算讓我這個習慣用Mac系統的工程師,順利完成2015年的報稅活動。
忘記幾年前,就想辦張自然人憑證,當時覺得新奇,想擁有一張!現在覺得一定要辦一張,因為它可以行使許多權利與服務,以節省我寶貴時間!
之所以延宕到現在才去區公所辦,是因為擔心有的沒有的瑣事,直到今年五月報稅月,很納悶自己這次還是沒收到繳稅試算通知單,我爸、媽、弟三人都有收到⋯⋯看來我應該是錢賺太少了~
資料多的時候我們會使用Table View,時常需要更新資料再來顯示,有時候一次只需要更新一則資料,此時我們也能指定特定資料來更新,若想讓使用者體驗好的話,還可以輕易地使用動畫呢!
處理字串真的是一門大學問,這次我想要搜尋某個關鍵字,是英文且不區分大小寫,此時我可以怎麼做?
我們可以使用Predicate設定Case-Insensitive,翻譯成中文是謂詞不區分大小寫,真是彆扭啊~
Apple官方文件有段描述:
String comparisons are by default case and diacritic sensitive. You can modify an operator using the key characters c and d within square braces to specify case and diacritic insensitivity respectively, for example firstName BEGINSWITH[cd] $FIRST_NAME.
意思就是只要在Predicate中加入[cd],就能找到英文不區分大小寫的字串囉~
平常習慣用內建的Apple Map,現在有需求要使用Google Map顯示地點,該怎麼做呢?其實還滿簡單的啦⋯⋯不用下載Google Map SDK,也不用申請API Key,只要使用者的手機有安裝Google Map App,即可導引他到指定的地點喔~
先前知道可以實作連結到App Store,在App中觸發事件來開啟App Store,並顯示特定App畫面,這時候發現有另一種選擇,就是不用開啟App Store,就能顯示該App在App Store顯示的樣子。這麼做的好處是讓使用者體驗更好,因為我發現自己在使用App時,被導出App時都會很不耐煩XD~因為看完之後,還要按Home鍵來回到原來的App。
有時候我們想要傳遞複雜的物件,比如影像(image)、特性字串(AttributedString)放到Dictionary中以Key/Value儲存,我們就能隨意帶著Dictionary到處趴趴走~這時候可以打包物件 (Archive Object)。
就如同我們所想的那樣,需要封裝(Archive)與解開(Unarchive)。
/**
Theme: Archive Object
IDE: Xcode 6
Language: Objective C
Date: 104/04/23
Author: HappyMan
Blog: https://cg2010studio.wordpress.com/
*/
- (void)viewDidLoad {
[super viewDidLoad];
#pragma mark - 這裡只是準備複雜特性的字串
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Happy World ^_^"];
NSRange range = NSMakeRange(0,string.length);
UIFont *markerFeltWide = [UIFont fontWithName:@"Arial" size:20.0f];
//字型
[string addAttribute:NSFontAttributeName value:markerFeltWide range:range];
//前景顏色
[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:range];
//背景顏色
[string addAttribute:NSBackgroundColorAttributeName value:[UIColor lightGrayColor] range:range];
//底線
[string addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:1] range:range];
//字間距
[string addAttribute:NSKernAttributeName value:[NSNumber numberWithInt:5] range:range];
//陰影
NSShadow *shadowDic=[[NSShadow alloc] init];
[shadowDic setShadowBlurRadius:3.0]; //0 ~ ? 清晰~模糊
[shadowDic setShadowColor:[UIColor blackColor]];
[shadowDic setShadowOffset:CGSizeMake(3, 3)];
[string addAttribute:NSShadowAttributeName value:shadowDic range:range];
//描邊顏色
[string addAttribute:NSStrokeColorAttributeName value:[UIColor orangeColor] range:range];
//描邊線條粗細 正數描邊 負數描邊加填滿
[string addAttribute:NSStrokeWidthAttributeName value:[NSNumber numberWithInt:-3.0] range:range];
#pragma mark - 封裝
NSMutableDictionary *happyInfo = [NSMutableDictionary new];
UIImage *image = [UIImage imageNamed:@"HappyMan.jpg"];
NSData *imageData1 = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0f)];
happyInfo[@"imageKey"] = [NSKeyedArchiver archivedDataWithRootObject: imageData1];
NSAttributedString *myString = string;
happyInfo[@"stringKey"] = [NSKeyedArchiver archivedDataWithRootObject: myString];
#pragma mark - 解開
NSData *archiveImageData = happyInfo[@"imageKey"];
NSData *imageData = [NSKeyedUnarchiver unarchiveObjectWithData: archiveImageData];
UIImage *happyImage = [UIImage imageWithData:imageData];
NSData *stringData = happyInfo[@"stringKey"];
NSAttributedString *happyString = [NSKeyedUnarchiver unarchiveObjectWithData: stringData];
[self.happyImageView setImage:happyImage];
[self.happyTextView setAttributedText:happyString];
}
這裡需要注意的是,影像必須要先轉成Data再來封裝,而一般字串類資料可以直接封裝,這還有道理XD~
範例中的特性字串含有者些訊息:
Happy World ^_^{
NSBackgroundColor = “UIDeviceWhiteColorSpace 0.666667 1″;
NSColor = “UIDeviceRGBColorSpace 0 1 0 1″;
NSFont = " font-family: \"Arial\"; font-weight: normal; font-style: normal; font-size: 20.00pt";
NSKern = 5;
NSShadow = “NSShadow {3, 3} blur = 3 color = {UIDeviceWhiteColorSpace 0 1}";
NSStrokeColor = “UIDeviceRGBColorSpace 1 0.5 0 1″;
NSStrokeWidth = “-3″;
NSUnderline = 1;
}
如此就能在有限制情況下傳遞資料囉~這可以用在Watch App和iOS App上的溝通呢!
不知怎麼稱呼,就先叫做動態框架 (Dynamic Frame)吧!描述一下我想達到的效果,簡單來說就是根據文字多寡,來讓顯示的界面可以跟著調整,最後所想要呈現的字不會被介面擋到。
因為很多時候是不知道字數的多寡,通常是在運行的時候才會知道,特別是從網路上取得的資料,此時我們會想要做這件事。
實在不知道怎麼翻TextField Inset,我會把它描述為「留邊」。因為TextField沒有ContentInset這個property,所以要另找技巧來實現。
可以見到舊密碼和密碼確認的Placeholder緊靠著左側,設定過後如新密碼,向右邊位移一段距離。
HappyMan・迴響