iOS UIScrollView image auto switch自動切換圖片

因為剛好有這樣的需求加上我懶得去找,簡單來說就像是個跑馬燈,每隔幾秒自動變換一次圖片,然後讓他自動輪播。原本還有想弄個UIPageControl上次方便管理目前所在頁面,變得有點像iOS瀏覽程式的那種感覺,但是我懶了...

Download code

首先import這class
#import "ImageSwitcher.h"

接著在需要的地方init出來,請記得使用initWithFrame,因為我也只有寫在這裡...反正順便設定寬高大小,以下為加入ViewController內
ImageSwitcher *imgSwitcher = [[ImageSwitcher alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 60)];
[self.view addSubview:imgSwitcher];
[imgSwitcher release];


完畢

※圖片檔我預設為"ad%d.png",例ad1.png,圖片都是放local端,等哪天有空再把直接web下載+lazyload加進來
※adHeight為廣告高度
※switchADTime為切換時間的長短

Download code

相關連結
iOS Developer Library
iOS Developer Library - UIImageView
iOS Developer Library - UIScrollView

iOS UIScrollView Scroll to somewhere捲動到指定點

其實這應該也沒啥,不過對我這腦容量不足的人應該還是很有用,最主要就是兩點。
1.設定UIScrollView的大小
2.scroll到指定位置

首先設定大小的部份
//init出來並且設定位置
UIScrollView *myScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
//設定內容大小
[myScrollView setContentSize:CGSizeMake(900, 900)];
//設定可以捲動
[myScrollView setScrollEnabled:YES];
//加進去self
[self.view addSubview:myScrollView];


接著就在需要捲動的地方加上
//point就是要滑動到的點,0,0為原點
[myScrollView setContentOffset:CGPointMake(0, 0) animated:YES];


相關連結
iOS Developer Library
iOS Developer Library - UIScrollView

Android adapter getView

因為這getView被問上不少次,其實這東西就像是iOS UITableViewDelegate內的"cellForRowAtIndexPath",只是在android上不僅可以使用於listView也可以使用在gridView,簡單一句話就是"他很好用"。

不過小弟我根本不會寫程式,如果有寫錯的部份就別給我面子捅下去就對了(簡單一個字就是懶...)

以下為自訂row在getView
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=getLayoutInflater();
View row;
//直接去抓xml的方式來定義內容
row=inflater.inflate(R.layout.custom_row, parent, false);

TextView title=(TextView)row.findViewById(R.id.title);
TextView subtitle=(TextView)row.findViewById(R.id.subtitle);
ImageView myImage = (ImageView)row.findViewById(R.id.myImage);

return (row);
}


以下為row的xml內容,基本上就是看你高興...
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="left"
>

<ImageView
android:id="@+id/myImage"
android:src="@drawable/my"
android:layout_width="100px"
android:layout_height="100px"
</ImageView>

<LinearLayout
android:gravity="left"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="100px">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title"
android:textSize="8pt"
android:singleLine="true">
</TextView>
<TextView
android:id="@+id/subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Subtitle"
android:textSize="6pt"
android:singleLine="true">
</TextView>
</LinearLayout>
</LinearLayout>


基本上到了這邊應該還會有個疑問是那每一個row要怎樣來把資料丟進去?我個人都是建一個class丟進array內來做管理,對我這種腦內記憶力不足的人來說還蠻好用的。
public class MyObj{
private String title;
private String subtitle;
private Drawable imageDrawable;
}


對應到row裡面可以使用下面這方法,其中的"myArray"也請記得先宣告出來
MyObj myObj = (MyObj)myArray.get(position);

相關連結
Android Developer
Android Developer - adapter
Android Developer - listview

iOS URL encode UTF8

URL轉UTF8並使用Apple URL Scheme,“Mail”、“Phone”、“Text”、“Map”、“YouTube”、“iTunes”

Mail
NSString *mail = [NSString stringWithFormat:@"Mail here"];
NSString* urlString = [NSString stringWithFormat:@"mailto:%@", mail];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];


Phone
NSString *tel = [NSString stringWithFormat:@"Phone number here"];
NSString* urlString = [NSString stringWithFormat:@"tel:%@", tel];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];

可參考"iOS dial a phone call 在app內撥電話"

Text
NSString *tel = [NSString stringWithFormat:@"Phone number here"];
NSString* urlString = [NSString stringWithFormat:@"sms:%@", tel];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];


MAP
NSString *address = [NSString stringWithFormat:@"address here"];
NSString* urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", address];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];

※地址部份可用經緯度代替 EX.25.xxxxx,121.xxxxxx(中間使用逗號隔開)

Map - Native
NSString *addressA = [NSString stringWithFormat:@"addressA here"];
NSString *addressB = [NSString stringWithFormat:@"addressB here"];
NSString* urlString = [NSString stringWithFormat:@"hhttp://maps.google.com/maps?daddr=%@&saddr=%@", addressA, addressB];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];

※地址部份可用經緯度代替 EX.25.xxxxx,121.xxxxxx(中間使用逗號隔開)

Youtube
NSString *id = [NSString stringWithFormat:@"Youtube id here"];
NSString* urlString = [NSString stringWithFormat:@"http://www.youtube.com/v/%@", id];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];


iTunes
NSString *id = [NSString stringWithFormat:@"iTunes id here"];
NSString* urlString = [NSString stringWithFormat:@"hhttp://itunes.apple.com/tw/app/halftone/id%@", id];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];

※不同國家store也會有所,此為台灣store

相關連結
iOS Developer Library
iOS Developer Library - Apple URL Scheme Reference
"iOS dial a phone call 在app內撥電話"

iOS NSXMLParser

XML parser在iOS裡面有不少選擇,甚至不少第三方的parser都比官方強勁,不過這篇重點是介紹官方的NSXMLParser。

step1. 先在.h檔加入NSXMLParserDelegate
#import

@interface DemoXML : UIViewController {
//xml
NSXMLParser *parser;
NSString *parserCurrent;
}

//xml
@property (nonatomic,retain) NSString *parserCurrent;

@end


step2. .m檔的部份加入property部份
//xml
@synthesize parserCurrent;


step3. .m檔內需要進行parser的部份加入
//需要parser的URL
NSString *parserString = @"需要parser的URL";

//若有特別需要轉碼
NSString *escaped = [parserString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

//NSXMLParser init
parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:escaped]];

//設定Delegate
[parser setDelegate:self];

//開始parser
[parser parse];


step4.設定Delegate的部份
//parser < XXXX>
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
//NSLog(@"elementName = %@", elementName);
//NSLog(@"elementName = %d", elementName.length);
//elementName就是其中XXX的部份
parserCurrent = elementName;
}

//parser
-(void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
//NSLog(@"didEndElement => elementName = %@ || namespaceURI = %@ || qName = %@", elementName, namespaceURI, qName);

}

//parser <>XXXXXX
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"foundCharacters = %@",string);

//如果XML的Tag名稱與所需相同,就做以下動作
if([parserCurrent isEqual:@"title"]){
//Todo something
}
}

//parser結束
-(void) parserDidEndDocument:(NSXMLParser *)parser{
//todo something
}


相關連結
iOS Developer Library
iOS Developer Library - NSXMLParser
iOS Developer Library - NSXMLParserDelegate Protocol Reference

PHP "Cannot modify header information - headers already sent by"

今天遇上這問題目前是順利解決來紀錄一下,稍微查了一下這可能是UTF8 dom的問題,也可能是buffer這部份的問題,總之我是用以下方是解決。

到"C:\Windows"找出php.ini將"output_buffering"修改為On
※O要大寫
; Output buffering allows you to send header lines (including cookies) even
; after you send body content, at the price of slowing PHP's output layer a
; bit. You can enable output buffering during runtime by calling the output
; buffering functions. You can also enable output buffering for all files by
; setting this directive to On. If you wish to limit the size of the buffer
; to a certain size - you can use a maximum number of bytes instead of 'On', as
; a value for this directive (e.g., output_buffering=4096).
output_buffering = On


修改完後別忘了將apache重新啟動

杜樂麗心饌

其實都吃完好幾天了,不過到現在才想到才想到來po...真的是沒空嗎?大概有99.99%是因為懶,至於未啥會來這家也是因為瘸子生日,不然光看到價錢...應該不是我該來的地方。不過說真的這家東西是真的還不賴

店門口


海膽


!@#!@$!@春捲(很明顯是我忘了)


生魚片、生蝦,生蝦真的超美味!


鍋物,四個人的量


傳聞中的松阪豬,一樣是投入鍋


玫瑰醋


@#%$︿#@$#@蒸蛋(非常好...我又忘了)


炸!@$$@魚排(再次忘了)


︿#@$@#$醋(沒錯!我很確定他是某種醋)


鮑魚


好大的蝦


龍蝦


壽司(連我這不很愛吃壽司的都很愛)


水果+甜點(泡芙)


︿$@#%#@茶(只記得味道很香很好喝)


總之...這家很好吃,但是也很貴

杜樂麗心饌
官方網站:http://www.coeur.com.tw/
地址:106台北市大安區Section 4, ShìMín Blvd 108號
電話:02-2775-2345


相關連結
完整真相

iOS Loading

在iOS內loading也是很重要的,最重要也是在parser資料的同時給user一點心理準備,當然也可以弄一條processbar來告知用戶,不過我懶,所以就直接弄個loading畫面蓋在畫面最上端,一方面也避免User亂按。

Download code

step1.下載完後的檔案直接解壓縮丟到project內


step2.把檔案匯入.h檔並且把function先預設好
#import <UIKit/UIKit.h>

#import "LoadingView.h"

@interface RootViewController : UITableViewController {
//loading
LoadingView *loading;

}

-(void)initLoading;
-(void)removeLoading;

@end


step3.在.m檔內把initLoading、removeLoading兩個function設定完成
-(void) initLoading{
loading = [[LoadingView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:loading];
[loading release];
}

-(void)removeLoading{
// NSLog(@"subView = %@", [self.view subviews]);
for(UIView *subview in [self.view subviews]) {
if([subview isKindOfClass:[LoadingView class]]) {
NSLog(@"remove Loading = %@", subview);
[subview removeFromSuperview];
} else {

}
}
}


step4.完成後就看哪時候需要loading就使用
[self initLoading];

要把他消失使用
[self removeLoading];



Download code

相關連結
iOS Developer Library

金馥記脆皮烤鴨

前幾天剛好去吃了這家烤鴨,門面看起來是蠻厲害的,但進入後看到點細節上得東西就覺得還好,直接進入主題烤鴨!店名顧名思義最厲害應該就是烤鴨,當然要來嘗試一下。烤鴨這種東西一定要現烤才行,所以要吃之前最好是先訂,不然大概整桌都要吃完烤鴨應該差不多可以跟水果一起上XD

烤鴨烤好後會在桌子旁邊將烤鴨切給你看,所切下來的部份就是給你直接服用,搭配餅皮、蔥段、點面醬弄成烤鴨夾餅。


切完後大致上長這樣(其實已經四個人每人都吃完兩三卷...)


搭配上餅皮等東西組合成烤鴨夾餅


完成後


到這應該會有疑問...就這樣切完就包含整隻鴨了嗎?當然沒有,鴨子的部份可以選擇兩吃、三吃、四吃,從三吃開始每多一種要多加200,而基本的兩吃890,烤鴨+兩籠餅皮+蔥段等佐料為基本配備,另一吃可以選擇加入酸白菜、粉絲煮湯或炒鴨骨、炒豆芽菜這三種選擇。

這次選擇為加入酸白菜、粉絲煮湯,味道還不賴


另外還點了一道比較有趣的"宮保皮蛋"其實就是宮保雞丁的雞丁改為皮蛋,皮蛋有先炸過,以前沒吃過所以覺得還蠻新鮮的


總結來說就是間普通的店,烤鴨並沒有特別的強勁,四個人吃下來平均一個人也要3XX將近400,如果不是特別想吃烤鴨在這價位上應該是有更好的選擇。

詳細資訊
電話:02-2579-0585
地址:台北市松山區南京東路四段66號

相關連結
金馥記脆皮烤鴨完整真相