Posts Tagged mac
ดูหนังบนไฟล์ .nrg Disk Image
เคยไหม กับการดาวน์โหลดหนังมาอย่างยาวนาน แต่ไฟล์ที่ได้กลับเป็นไฟล์ Image ซะอย่างงั้น ไฟล์ Image ที่ว่าหมายถึงไฟล์ที่ใช้สำหรับโปรแกรมไรท์แผ่นนะครับ ไม่ใช่ไฟล์รูปภาพ ถ้าเราไม่มีแผ่นเปล่าหล่ะ หรือไม่อยากไรท์หล่ะ หรือใช้ OS อื่นที่เปิด Format นั่นมันไม่มีโปรแกรมเปิดหล่ะ หรือเรายังอยากจะปล่อยไฟล์นั้นไว้สำหรับ Seed ใน Bittorent หล่ะ เหตุผลร้อยแปดที่เราอยากจะดูหนังจาก Disk Image ซะให้ได้
ไฟล์ Disk Image จะมีอยู่หลายนามสกุลครับ แต่ที่เจอบ่อยจะเป็น .iso, .nrg หรือนามสกุลอื่นๆ (นึกไม่ออกแล้ว) วิธีการมีง่ายๆครับ ถ้าใช้งานบนวินโดวส์ ก็ใช้โปรแกรม Daemon Tool สร้างไดรฟ์ CD จำลองแล้วแล้ว Mount ข้อมูลจาก File disk image ก็เป็นอันโอเคแล้ว
แต่ผมดันใช้แมคน่ะซิครับ แต่ไม่เป็นปัญหา ผมมีวิธีง่ายกว่านั้นอีก คือ ถ้าไฟล์ฟอร์แมตเป็น .nrg ก็ใช้วิธีการ เปลี่ยนนามสกุลมันซะ ให้เป็น .iso จากนั้นเปิดด้วยโปรแกรม VLC ทั้งแบบที่เป็น .iso นั้นซะเลย VLC ก็สามารถหาโหลดได้ฟรีครับ บนวินโดวส์หรือ Linux ก็คิดว่าทำได้เช่นเดียวกัน เพราะ VLC มีทั้ง 3 Platform ครับ
* Update : ไม่ต้องแปลงนามสกุลก็ได้ เปิดทั้งเป็น .nrg เลยก็ได้ วู้ว สุโค่ย
Add comment พฤษภาคม 11, 2009
iPhone Development – View, Drawing
สำหรับ Entry นี้อาจจะพูดถึงส่วนของ View ใน iPhone นะครับ ซึ่งอยู่ใน Lecture ที่ 5 ของ stanford course ซึ่งจะกล่าวถึงคลาส UIView ของ iPhone, การใช้เครื่องมือสำหรับการวาดอย่างง่ายครับ
ไม่แน่ใจว่ามันจะก้าวกระโดดไปนิดรึเปล่า เอาเป็นว่า Entry นี้ผมจะหลักเลี่ยงการโค้ดนะครับ เริ่มกันที่ View นะครับ
ส่วนที่เป็น View คือส่วนที่เป็นสี่เหลี่ยมผืนผ้าตรงหน้าจอนั่นแหละครับ ทั้งหมดเลย ซึ่งภายใน View จะมีการทำงาน 2 อย่างอยู่ด้วยกัน คือ ส่วนของ Content และ Event
Content ก็คือตัวอักษร, รูปภาพหรือสิ่งที่ถูกวาดขึ้นบนจอภาพนั่นเองครับ ใน View แต่ละหน้าจะมี View หลักตัวหนึ่ง(เทียบตาม Tree ก็เป็น Root) เราเรียกว่า Superview ครับ ภายใน Superview ก็จะมี View ย่อยๆ เรียกว่า Subview ถ้านึกไม่ออกว่าเป็นไง ก็ลองนึกถึงกระดานปักหมุด(Superview)ที่มีกระดาษ(subview)แปะอยู่แล้วกันครับ ส่วน Event คือเหตุการณ์ที่เกิดขึ้นบนหน้าจอนั่นเองครับ ไม่ว่าจะเป็นการ Tab, การ Scroll ฯลฯ ทั้งหมดที่จะสั่งการให้ iPhone ทำงานได้ ถือเป็น Event หมด
เนื่องจาก View เป็นการวาดรูปภาพขึ้นมาบนส่วนของ Content ดังนั้นโครงสร้างต่างๆที่เกี่ยวข้องกับ View ก็เป็นเกี่ยวกับการวาดเช่นกัน ได้แก่ CGPoint หมายถึง ตำแหน่งที่อยู่(x,y) ,CGSize หมายถึง ขนาด(Width, Height) และ CGRect หมายถึงกรอบ(CGPoint, CGSize) ลักษณะ Coordinate ของ iPhone จะไม่เหมือนกับพิกัดการวาดรูปทั่วๆไปครับ จุด origin จะอยู่ที่มุมซ้ายบน (จากปกติมักจะอยู่ซ้ายล่าง)
เกี่ยวกับการวาดนั้น การอ้างอิงพิกัดหรือพ้ืนที่สำหรับวาด จะมีอยู่ 2 แบบ คืออ้างอิงจาก Frame และอ้างอิงจาก Bound ทั้งสองแบบแตกต่างกันตรงที่ “มันเป็นตำแหน่งเมื่อเทียบกับขอบกระดานปักหมุกหรือเทียบกับขอบกระดาษที่แปะ” ถ้า Frame คือเมื่อเทียบกับขอบกระดานปักหมุด แต่ถ้า Bound ก็เทียบกับกระดาษบนกระดานปักหมุด ถ้ายังไม่เข้าใจลองดูที่สไลด์ที่ 19 ก็อธิบายได้ชัดเจนดีครับ มีคำแนะนำอยู่นิดหน่อย (อยู่ในสไลด์ที่ 20) เกี่ยวกับการใช้งาน Frame และ Bound
สิ่งที่อยู่เหนือกว่า Superview คือ Window แต่ละ App จะมี 1 Window และ Window มักจะถูกจัดการมาให้เราใน template เรียบร้อยแล้ว
ส่วนเรื่องของการโค้ด มีตัวอย่างอยู่ใน สไลด์ที่ 25-27 นะครับ ไม่ขอเอามาเขียนซ้ำนะครับ แล้วก็คิดว่าโค้ดไม่น่าจะยากอะไรด้วย แต่ถ้าสงสัยก็โพสถามเอาละกันนะครับ
ต่อไปเรื่องของการ Drawing ครับ
การ Drawing ลงไปบน Content View นั่น จะทำโดยการ override คำสั่งการวาดไปในฟังก์ชั่น Drawrect ครับ แต่การสั่งให้ Draw จะไม่ได้ใช้วิธีการเรียกฟังก์ชั่น Drawrect ครับ แต่จะใช้คำสั่ง setNeedDisplay แทน งงมั้ยครับ? ลักษณะนี้เรียกว่า “Lazy Loading” ครับ view ของเราจะไม่ถูกวาดอยู่ตลอดเวลา แต่วาด(ตามที่สั่งใน drawRect)แค่เฉพาะตอนที่สั่ง(ว่า setNeedDisplay)เท่านั้น
เครื่องมือเกี่ยวกับการวาด จะเป็น Core Graphics และ Quartz 2D ทั้งสองตัวที่กล่าวถึงเป็น Graphic Library บน Cocoa ครับ ใช้โดย Library นี้เป็น C-Base API นะครับ ไม่ใช่ Objective-C ส่วนวิธีการวาดอย่างละเอียดนั้น คงไม่ขอพูดถึงในที่นี้ เพราะจะยาวจนเกินไปครับ(รวมทั้งอยากหลีกเลี่ยงการ Coding ใน Entry นี้ไปก่อนด้วย) คงจะมาอัพเดตในคราวหน้า แต่ถ้าสนใจก็ดูในสไลด์ก่อนก็ได้ครับ ใน Entry นี้ไว้เท่านี้ก่อนครับ
Add comment มีนาคม 23, 2009
Objective – C Custom Class
ก่อนอื่นขอบอกก่อนนะครับ ว่าหลังจากนี้ ผมจะอิงเนื้อหาจาก CS193P ของ Stanford มาเขียนเป็นบทๆ (เพราะถ้าตั้งหัวข้อเขียนเอง ท่าทางจะงง และจะไม่ครบถ้วน) ถ้าอยากดูสไลด์ประกอบก็ตามในเวบของ CS193P เลยนะครับ
จากก่อนหน้านี้ ผมอธิบายคร่าวๆเกี่ยวกับสิ่งต่างๆที่ต้องรู้ และในหัวข้อ Objective-C ก็อธิบายไว้คร่าวๆเหมือนกัน Entry นี้จะมาเจาะลึกกันซักหน่อย โดยจะเริ่มกันที่เรื่องของ Custom Class ของ Objective-C
ในการสร้าง Custom Class ใน Objective-C ไฟล์ที่ได้จากการสร้าง New Class จะมี 2 ไฟล์ คือไฟล์ .h และ .m
- ไฟล์ .h จะเป็น Header ไฟล์ ที่กำหนดลักษณะทั้งหมดของคลาส ว่า Class Name ชื่ออะไร มี Attribute และ Method อะไรบ้าง นอกจากนั้นยังเป็นส่วนที่กำหนดการเชื่อมต่อกับ Interface Builder ด้วย ลักษณะก็จะเป็นแบบนี้
#import <Foundation/Foundation.h> // import เหมือนกับคำสั่ง include ของ C/C++
@interface ClassName : NSObject {
// Attribute ของ Class : เขียนเหมือนภาษา C ครับ
// Syntax: datatype varName
id attr1;
NSString *attr2;
…
}
// Methods Header : คล้ายๆกับภาษา C เหมือนกันครับ ต่างกันนิดหน่อย
// Syntax: -/+ (returnDatatype)MethodName:(ParameterDatatype)parameterName;
- (void)setAttr2:(NSString *)aValue;
- (Nsstring *)attr2;
@end
- ไฟล์ .m เป็นส่วนของการ Implement Method ของคลาสทั้งหมด ลักษณะก็ประมาณนี้
#import “headerFile.h”
@implementation ClassName
- (void)setAttr2:(NSString *)aValue {
attr2 = aValue;
}
- (NSString *)attr2 {
return attr2;
}
@end
ครับ จากตัวอย่างเป็นการสร้าง Class ที่มี Method Getter กับ Setter นะครับ ต่อไปก็จะเป็นการสร้าง Object, Memory Management และการ ลบ Object นะครับ เริ่มต้นที่การสร้าง Object
การสร้าง Object มีสองขั้นตอนคือ การจองพื้นที่ และ การกำหนดค่าตั้งต้นของ Object ซึ่งรูปแบบมีดังนี้
ObjectClass *ObjectName = [[ObjectClass alloc] init];
การกำหนดค่าตั้งต้นอาจจะมี Parameter อื่นๆได้ด้วย ในกรณีตัวอย่างหมายถึง Default การกำหนดนี้ จะเกี่ยวข้องกับ Memory Management ตรงที่ Object ที่ถูกประกาศ จะมี retain count เป็น 1 หมายความว่า ตราบใดก็ตามที่ Object ตัวนี้ยังมีค่า retain count เป็น 1 หมายความว่า object ตัวนี้จะยังคงอยู่ในหน่วยความจำไปเรื่อยๆ ถ้าเราต้องการลบ Object ตัวนี้เราก็ทำได้โดยการใช้คำสั่ง Release แบบนี้ครับ
[ObjectName release];
ซึ่งจากข้างต้น ให้พูดง่ายๆก็คือ malloc กับ free ในภาษา C นั่นแหละครับ
แล้วก็อย่างที่บอกก่อนหน้านี้ครับ หลังจาก Mac OS X ออกมาเป็นเวอร์ชั่น 10.5 Leopard สิ่งที่คลานตามออกมาด้วยกัน คือ Objective-C 2.0 หลักๆก็มีสามอย่างอย่างที่เคยบอกนะครับ แต่Entry นี้จะเน้นเรื่อง Property แค่เรื่องเดียว เพราะเป็นเรื่องสำคัญใน iPhone Development เลยทีเดียว
Property เป็นสิ่งที่เข้ามาช่วยกำหนดคุณลักษณะของ Attribute ของ Class ของเราครับ ว่ามันอยู่ในหน่วยความจำอย่างไร Access ค่าแบบไหน ถามว่ามันจะรู้ไปทำไมว่าอยู่ในหน่วยความจำอย่างไร (retain, assign, copy) ก็เพราะฟีเจอร์เกี่ยวกับ Garbage Collector ส่วนเรื่อง Access ค่าอย่างไร (readwrite, readonly) ก็เป็นเรื่องที่เกี่ยวกับการใช้งานฟีเจอร์สร้าง Method Getter/Setter อัตโนมัติของ Property เอง (มันจะสร้างแบบไหนก็เกี่ยวกับมันอยู่ในหน่วยความจำอย่างไรเช่นกัน)
ส่วนว่าแต่ละอย่างมันหมายความว่ายังไงบ้าง ก็หมายความอย่างนี้ครับ
retain – Attribute นั้นถูกประกาศขึ้นโดย retain Count เป็น 1 Value เป็น default
assign – Attribute นั้นเป็น Pointer ชี้ไปที่ Attribute อื่นอีกทีนึง
copy – Attribute นั้น Access ค่าโดยการ Copy ค่ามาจากที่อื่น แต่ไม่ได้เพิ่ม retain count ขึ้นมาด้วย
readonly, readwrite – เป็นตัวกำหนดการ Access Attribute ว่าให้อ่านอย่างเดียวหรือเขียนได้ด้วย
ซึ่งตัวอย่างการใช้งานก็จะเปลี่ยนจากตัวอย่างด้านบนมาเป็นลักษณะนี้ครับ
#import <Foundation/Foundation.h>
@interface ClassName : NSObject {
id attr1;
NSString *attr2;
}
@property id attr1;
@property Nsstring *attr2;
@end
ไฟล์ Implement
#import “headerFile.h”
@implementation ClassName
@synthesis attr1;
@synthesis attr2;
@end
จะเห็นว่า Method Getter/Setter หายไปและแทนที่ด้วยการกำหนด property แทน และในส่วนของ implement ก็แค่ใช้คำสั่ง @synthesis <#attribute> เพื่อให้มันสร้าง Method Getter และ Setter ขึ้นมา สั้นและง่ายขึ้นเยอะเลยใช่มั้ยครับ
ส่วนเรื่องการใช้งาน จะใช้ dot syntax เข้ามาแทนการเข้าถึง attribute ที่กำหนด property ครับ ลักษณะก็เป็นแบบนี้ (ใช้ class จากตัวอย่างข้างต้น)
objectExample.attr2 = @”test String”; // อันนี้เป็นกรณี Setter method
NSLog(@”%@”, objectExample.attr2); // อันนี้เป็นกรณีของ Getter method
ไม่ยากเกินไปใช่มั้ยครับ เกี่ยวกับเรื่องของ Custom Class ใน Objective-C สำหรับเนื้อหา Entry นี้อ้างอิง CS193P : Chapter 3 Custom Class นะครับ อยากดูสไลด์ก็ไปดูได้ (แต่ผมไม่ได้ทำหรอกนะ) เข้าใจไม่เข้าใจยังไงก็ติชมได้ครับ สำหรับบทนี้ขอจบเท่านี้ครับ
2 comments มีนาคม 6, 2009
Cocoa & iPhone Development : Objective – C
ขออภัยที่หายไปนาน เนื่องจากเดือนนี้ ง่วงอยู่กับการอ่านหนังสือ iPhone อยู่ (แถมได้ E-book มาอีกเล่ม) เร็วๆนี้คงได้มา Review กันหลายเรื่องแน่นอน (ขอบอกไว้ก่อนว่า เล่มที่อ่านอยู่เจ๋งเอาเรื่องเลยทีเดียว)
เนื่องจากกลัวว่าจะลืมกัน บวกกับกลับมาลับ Basic กันนิดหน่อย เลยเบรคเรื่องอ่านหนังสือมาเขียนบลอกนิดนึง เริ่มเลยละกัน
…อย่างที่สามในการพัฒนา iPhone Application คือ “ภาษา” นั่นเอง ปัจจุบันแม้ว่าจะใช้ภาษา Native อื่นๆในการพัฒนา App บน Mac ได้มากมาย ไม่ว่าจะเป็น Java (ได้นานแล้ว), Python, Ruby ฯลฯ แต่โดยหลักแล้ว ภาษาหลักที่ใช้ในการพัฒนา App บนแมค และโดยเฉพาะ iPhone มีแค่ภาษา Objective-C เท่านั้น
Objective-C เป็นภาษา C ที่ถูกเอามาพัฒนาให้รองรับแนวคิดแบบ Object-Oriented แท้ๆ ย้ำว่าแท้ เพราะไม่เหมือนภาษา C++ ที่เป็น Object-Oriented ไม่แท้ (C++ มีคุณสมบัติของ OOP ไม่ครบถ้วน อาจค้านความคิดของหลายๆคนนะครับ ว่ามันไม่แท้ได้ไง ถ้าให้แจงกันใน Entry นี้คงหลุดประเด็นเกินไป ดังนั้นจะไม่พูดถึงนะครับ) เพราะฉะนั้น ลักษณะโครงสร้างและ Syntax ของ Objective-C จึงเหมือนกับภาษา C ซะเป็นส่วนมาก สไตล์การเขียนจึงเป็นแบบ Sequence Programming รวมถึง Library ของภาษา C ก็นำมาใช้ได้เลย แบบไม่ต้องเปลี่ยนแปลงอะไร (ถ้าเป็น Standard Library)
แต่สิ่งที่เพิ่มเข้ามา คือลักษณะ Syntax ที่แตกต่างในบางเรื่อง ที่เห็นหลักๆก็ส่วนเกี่ยวกับ Object และ Class การประกาศและการใช้งานคลาส ที่ไม่เหมือนกับของภาษา OOP แบบอื่นๆ ที่มีการใช้ “.” ในการแทน Method ที่เรียกใช้ แต่ Syntax ของ Obj-C จะใช้ “ปีกกา ( [] )” แทนการเรียกใช้ Method ของ Object ตัวอย่างเช่น
id testString = [NSString stringWithString:@"Test String"];
จากตัวอย่าง จะเห็นว่า NSString เรียกใช้ method “stringWithString” โดยมีค่่า Parameter เป็นข้อความว่า Test String แบบนี้เป็นต้น
จะเห็นว่า Syntax แบบนี้ค่อนข้างจะเรียบร้อยและอ่านเข้าใจง่ายกว่า Syntax แบบจุด มากกว่าเยอะ
เรื่องของชนิดข้อมูล (Datatype) ก็เช่นกัน Obj-C มีชนิดข้อมูลทั้ง Static และ Dynamic ที่สำคัญคือ Datatype แบบ Dynamic เพราะเป็นองค์ประกอบสำคัญของหนึ่งในคุณสมบัติของ OOP ข้อที่ชื่อว่า “Polymorphism” (ซึ่ง C++ ไม่มี) ซึ่งตัวแปรแบบ Dynamic Datatype ของ Obj-C คือ Datatype ชนิดที่ชื่อว่า “id” ดังตัวอย่างข้างต้น จากตัวอย่างหมายความว่า “ถ้า Value ด้านหลัง เปลี่ยน Class เป็นชนิดอื่นที่ไม่ใช่ NSString ตัวแปร testString ก็เป็น Object ของ class นั้นได้โดยไม่ต้องเปลี่ยนชนิดข้อมูล” DataType ชนิดนี้ ต่อไปเราจะได้เห็นกันบ่อยๆครับ
การจัดการ Memory ใน Obj-C ก็เป็นเรื่องสำคัญ ลักษณะของการจัดการ Memory ของ Obj-C คือการ Retain Count ขอยกตัวอย่างจากในหนังสือของ Aaron ละกันนะครับ ว่ามันเหมือนกับเราจูงหมาน่ะครับ ถ้าหมาของเรามีเชือกจูงอยู่ 2 เส้น ก็เหมือนกับตัวแปรตัวนั้นถูกเชื่อมการทำงานอยู่กับ 2 component ตัวแปรนั้นก็จะยังไม่ถูกคืนความจำ และเมื่อใดที่คนจูงทั้งสองคนปล่อยเชือกจูง หมาก็มีอิสระ ก็เหมือนกับ Component ไม่มีการใช้งานตัวแปรนั้นแล้ว ก็จะทำการคืนหน่วยความจำให้เครื่องนั่นเอง
ข้างต้นเป็นสิ่งที่อยู่ใน Objective-C 1.0 นะครับ แต่หลังจาก Mac OSX Leopard ถูกปล่อยออกมา Objective-C ก็เพิ่ม Version ขึ้นมาด้วย เป็น 2.0 สิ่งที่เพิ่มขึ้นมาก็มีอยู่ 3 อย่างใหญ่ๆ (ที่จริงเคยเขียนไว้ในนี้แล้ว)
1. Fast Enumerate เป็นการวนลูปใน Array แบบใหม่ ที่สั้นลง เร็วขึ้นง่ายขึ้น ลักษณะคล้ายๆกับการวนลูปในภาษา Ruby เจ๋งมากครับอันนี้
2. Garbage Collector เป็นระบบจัดการ Memory แบบใน Java ชาว Cocoa ก็ได้เฮ แต่ Cocoa Touch คงต้องจ๋อยกันไป เพราะ iPhone ไม่ Support Garbage Collector ครับ
3. Property List ลักษณะของการกำหนดคุณลักษณะของ Attribute ของ Object แบบใหม่ ที่ช่วยให้เรากำหนดคุณลักษณะและค่าของตัวแปร ได้ง่ายขึ้นด้วยโค้ดที่สั้นลง แต่อันนี้ดีอย่างเสียอย่างครับ ข้อดีคือโค้ดสั้นลงเยอะเหมือนกัน แต่ข้อเสียคือ เราต้องกลับไปใช้ Syntax แบบจุดกัน อันไหนใช้จุดอันไหนใช้ปีกกา มือใหม่ได้งงกันน่าดูหล่ะครับ ซึ่งข้อนี้ ต่อไปจะได้เจอกันเยอะเลย ส่วนเรื่องของ Property List ถ้าอยากรู้ตอนนี้เลยก็ลองเข้าไปอ่านของเวบ mac’feteria เอาก่อนได้เลย พี่เขาเขียนไว้ดีมากครับ
สิ่งที่แตกต่างระหว่าง C และ Obj-C ที่จะพูดถึงใน Entry นี้ ก็จะขอเขียนไว้เท่านี้ก่อน(เพราะยังนึกไม่ออก แหะๆ) รายละเอียดลึกๆอื่นๆคงได้เขียนเพิ่มตอนหลัง หรืออธิบายในบทถัดๆไป ในบทนี้ไว้เท่านี้ก่อนนะครับ ;)
7 comments กุมภาพันธ์ 27, 2009
Cocoa & iPhone Development : แนะนำแหล่งเรียนรู้เพิ่มเติม
ตอนนี้ การพัฒนาแอพพลิเคชั่นบน iPhone เป็นที่สนใจสำหรับหลายๆคน และผมก็เป็นคนหนึ่งและก็เขียนบทความเกี่ยวกับการพัฒนาบนแมคอยู่ที่นี่มา ที่มานั่งเขียน Entry ต่างๆก็เพราะตัวผมเองก็มีประสบการณ์กับเรื่องพวกนี้ประมาณ 2 ปีแล้ว พบว่า “แทบจะไม่มีบทความเกี่ยวกับการพัฒนาบนแมคที่เป็นภาษาไทยเลย” เท่าที่เสิร์ชเจออยู่สองที่ คือ ที่นี่ กับ แมคเฟทีเรีย ที่พูดถึงการพัฒนาบนแมคเป็นหลัก นอกนั้นอาจมีแค่ประปราย
แล้วผมไปศึกษาจากที่ไหนบ้าง ก็จะเอามาเขียนใน Entry นี้นะครับ บางที่อาจจะเคยโพสไว้ใน Entry เก่าๆ และบางอันอาจจะใหม่กิ๊งประมาณว่าเพิ่งเจอเมื่อไม่กี่วันนี้เอง คิดว่าน่าจะมีประโยชน์เหมือนกัน (อย่างน้อยก็กับคุณเป้นะครับ อิอิ ตามกันมาทุก Entry เลยทีเดียว)
1. Mac’Feteria Website : เวบไซต์เกี่ยวกับการพัฒนาบน iPhone อีกที่นึงที่เป็นภาษาไทย เท่าที่ผมเจอของคุณ ter (ที่จริงผมคิดว่าเคยเจอพี่เขาแล้วนะครับ ที่ VizRT คิดว่าไม่น่าผิดคน) เวบนี้ก็แบ่งเนื้อหาเป็นบทๆเรื่องๆเหมือนกันกับที่นี่ ตอนนี้เนื้อหาก็ยังเป็นส่วนของการเริ่มต้นเช่นกัน แต่เนื้อหาจะลงลึกไปถึง Coding เลย ลองเข้าไปสกรีน ไปดูคร่าวๆก่อนก็ได้ครับ เข้าใจมั่งไม่เข้าใจมั่ง เคยเห็นก็ยังดีแหละครับ
ลองเข้าไปดูที่ http://www.macfeteria.com
2. หนังสือ Cocoa Programming for Mac OS X – Aaron Hillegass : เล่มนี้เคยแนะนำไปแล้ว และก็จะขอแนะนำอีกที เล่มนี้คือ Bible สำหรับการพัฒนาบนแมคจริงๆครับ ผมก็เริ่มจากเล่มนี้แหละ ไม่เคยอ่านก็ต้องไปหามา ไม่ซื้อก็โหลดแหละครับ หาไม่ยากเลย (แต่แนะนำให้ซื้อ) ตอนนี้ออก 3rd Edition แล้ว เนื้อหาครอบคลุม Objective-C 2.0 และมีการใช้งาน Instrument Debugger ด้วย ห้ามพลาดครับเล่มนี้
3. Hot Cocoa Screencast – Thomas Vinck : อันนี้เพิ่งเจอเมื่อไม่กี่วันนี้เองครับ Screencast สอนการพัฒนาแอพพลิเคชั่นด้วย Cocoa Framework เนื้อหาเข้าใจง่าย ภาพคมชัดคุณภาพ HD และที่สำคัญ ฟรีครับ ไม่มีค่าใช้จ่าย ตอนนี้เนื้อหาเพิ่งอยู่บทที่ 9 ลองเข้าไปดูกันครับ วิธีก็คือใช้โปรแกรม iTunes ครับ เข้าไปที่ iTunes Store แล้วก็เสิร์ชเอาเลย ว่า Hot Cocoa แล้วก็ Subscribe เอาได้เลย
4. CocoaCast – Boris Klaydman : อันน้ีก็ Screencast เหมือนกันครับ เคยเข้าไปดูนานแล้ว แล้วไม่ได้ดูต่อ ดีเหมือนกันครับ ตอนนี้ไม่รู้ไปถึงไหนแล้ว แต่ก็แนะนำไว้อีกที่ครับ วิธีการเข้าไปดูก็เหมือนกับอันบนครับ search ว่า cocoacast
5. iPhoneDevCentral.org website : เวบนี้ก็ดีครับ เป็นที่รวมทั้ง Article Tutorial และ Screencast Tutorial และ Forum ต่างๆด้วย แถมแบ่งระดับให้อีกตะหาก เวบนี้ต้องลองครับ
6. iPhone Developer’s Cookbook – Erica Sadun : เล่มนี้เคยแนะนำใน Entry เก่าแล้วครับ ไม่เหมาะสำหรับมือใหม่เท่าไหร่ แต่ก็เป็น ตัวอย่างโค้ดสำหรับมือใหม่ได้ ส่วนมือที่ไม่ใหม่แล้วก็ได้ประโยชน์ดีครับ ทำอะไรเป็นขึ้นอีกเยอะเลย เล่มนี้ออกตั้งแต่ตุลาคมปีที่แล้วแล้วครับ ไปหาซื้อหาอ่านเอาเองได้ตามสะดวกครับ (มีให้โหลดแล้วนะครับ แต่ต้องหากันเองนะครับ)
7. Begining iPhone Development : Exploring iPhone SDK -Dave Mark & Jeff LaMarche : เล่มนี้ครับ ของใหม่มาแรง ผมเองก็เพิ่งได้มาเมื่อต้นมกราคม คิดว่าเล่มนี้น่าจะเป็นเล่มที่สมบูรณ์มากเล่มนึงเท่าที่ตอนนี้มี (ตอนนี้มีสองเล่ม เหอะๆ) เล่มนี้น่าจะเหมาะกับการเริ่มต้นศึกษาใหม่ๆ เพราะไม่ยากเกินไป (เล่มนี้หาโหลดได้อีกแล้วเช่นกัน)
8. Stanford CS193P Course : Course iPhone Development ของมหาลัย Stanford ครับ เปิดให้เข้าไปดู Slide ได้ฟรี (แต่ดู Video ไม่ได้ แย่จัง) เนื้อหาประมาณ 20 บทครับ มีประโยชน์ล้วนๆ!! และขอแนะนำแบบสุดๆให้ไปลองอ่านกันดู (แล้วจะเข้าใจว่าทำไมฝรั่งมันเก่งกันนัก)
ลิงค์อยู่ที่นี่ครับ : CS193P Cocoa programming Course
ทั้งหมดนี้ก็เป็นแหล่งข้อมูลหลักๆที่ผมใช้ศึกษาทั้งที่ผ่านมาและปัจจุบันนะครับ แนะนำกันไว้เผื่อจะสนใจไปลองดูกัน แทบทั้งหมดเป็นภาษาอังกฤษนะครับ อยากให้ทำใจและอย่าไปกลัวกับเรื่องภาษา อันที่จริงผมก็ไม่ได้เก่งภาษาอังกฤษเลย (ดูจากที่แปล Entry เป็นภาษาอังกฤษก็รู้) และถ้าอยากให้มีเวบแบบนี้เป็นภาษาไทยเยอะๆ ก็ช่วยกันอ่าน ช่วยกันแปล ช่วยกันแชร์ข้อมูลนะครับ
12 comments กุมภาพันธ์ 2, 2009
Cocoa & iPhone Development : MVC Design Pattern
มาว่ากันด้วยเรื่องแรกที่เราต้องรู้จากที่กล่าวไว้ข้างต้นนะครับ(ถ้าไม่นับว่าต้องมีเครื่องแมค อันนั้นมีตังซื้อก็พอแล้ว อิอิ) เรื่องเกี่ยวกับ MVC (Model-View-Controller) Design Pattern นั่นเอง
อันที่จริง เกี่ยวกับ MVC นี้ หาอ่านได้ไม่ยากในอินเตอร์เนต ทั้งภาษาอังกฤษและภาษาไทย ซึ่งหลายๆที่ก็อธิบาย MVC ในเทอมต่างๆภาษาและเฟรมเวิร์คกันไป เช่น MVC บน PHPCake(PHP) หรือ MVC บน Ruby on Rails(Ruby) ในที่นี้ ผมเองก็จะขออธิบายในเทอมของ Cocoa ละกันนะครับ
เริ่มเลยแล้วกัน…
MVC Design Pattern คือ Design Pattern ในระดับ Architecture แบบนึง ที่ได้รับความนิยมในการ Design Application ขนาดใหญ่ในปัจจุบัน ตัว MVC ในชื่อของมัน ย่อมาจากคำว่า Model-View-Controller ซึ่งก็ตรงตัวกับลักษณะของมันนั่นเอง ซึ่งก็คือ “การแบ่งองค์ประกอบของ Application ออกเป็นสามส่วนแยกออกจากกัน” ซึ่งแต่ละส่วนจะทำงานเชื่อนโยงกันในลักษณะดังภาพ

Cocoa MVC - ภาพจาก Apple.com
แนวคิดของ Design Pattern จากภาพจะเห็นว่า แอพพลิเคชั่นแบ่งออกเป็น 3 ส่วน คือ View และ Model เชื่อมต่อกันผ่าน Controller แล้วแต่ละส่วนมันเป็นยังไงไงบ้างหล่ะ ?
Model คือ ส่วนของข้อมูล ตัวอย่างเช่น Database หรือ Datasource ของตารางใน Application เป็นต้น Model อาจรวมถึง State ของ Application ได้ด้วยเช่นกัน เช่น Preference Setting ของโปรแกรมก็ได้ ไม่ได้จะหมายถึง Information อย่างเดียวเท่านั้น ซึ่งตัว Model เองก็จะต้องมี Model Logic อยู่ด้วย ซึ่งก็หมายถึง เงื่อนไขการเข้าถึงหรือการเก็บข้อมูล จะเก็บอย่างไร ชนิดไหน อย่างไร ฯลฯ (ในส่วนของ Model Logic จะเห็นชัดเมื่อเรารู้จัก Property List ใน Objective-C 2.0 ที่จะพูดถึงในภายหลังนะครับ ตอนนี้ Push Stack ไว้ก่อนนะครับ) หน้าที่ของ Model ไม่มีอะไรไปมากกว่า “การเก็บข้อมูล” และ “การส่งข้อมูล” เท่านี้จริงๆครับ ไม่มีมากไปกว่านี้ อย่าสับสนกับ Model Logic นะครับ
View คือ ส่วนของการแสดงผล เช่นกันครับ หน้าที่ของ View ไม่มีไปมากไปกว่า “การแสดงผล” และ “การรอรับคำสั่ง” View ที่เห็นๆกันก็คือ GUIs นั่นแหละครับ ภายใน View ก็เหมือนกับ Model ครับ ต้องมี View Logic เช่นกัน View Logic ก็คือข้อกำหนดของการแสดงผลครับ หน้าต่างกว้าง-ยาว แค่ไหน ปุ่มเป็นสไตล์ไหน ตัวอักษรสีอะไร ฯลฯ นีแหละครับ View Logic น่าจะพอเห็นภาพนะครับ
Controller ส่วนนี้เป็นส่วนที่เชื่อมการทำงานระหว่าง Model กับ View จะพูดให้ง่ายกว่านั้นก็คือ มันคือ “User Logic หรือ Action Logic” ครับ เพราะมันเป็นส่วนควบคุมการทำงานของ User ที่ทำต่อ Application นั่นเอง ว่า User ทำอะไรได้บ้าง แล้ว Application ต้องทำอะไรบ้างเมื่อได้รับ Action นั่นมาแล้ว นั่นคือหน้าที่ของ Controller ครับ
ใน Cocoa Framework ยังมี Object อีกประเภทนึง เรียกว่า “Hybrid Model” ซึ่งหมายถึง Model ที่รวม Model กับ Controller เข้าไว้ด้วยกัน เพราะบางครั้งการแยกกันแบบ MVC อาจไม่ได้เหมาะสมกับ Application ทุกแบบ(รวมกันอาจจะดีกว่า ง่ายกว่า เร็วกว่า) ตัวอย่างของ Hybrid Model ใน Cocoa ก็เช่น Array Controller เป็นต้น และใน iPhone App Dev ก็เช่น Image Picker เป็นต้น(นอกจากนี้ยังมีอีกเยอะ แต่ยังไม่ได้ลอง) ซึ่งก็จะได้รู้จักกันภายหลังนะครับ (Push Stack ไว้อีกอันแล้วกันนะครับ)
ในส่วนของ MVC ก็ขอจบไว้เท่านี้นะครับ สามารถศึกษาเรื่องของ MVC ได้จากที่อื่นด้วยนะครับ บางที่อาจจะเขียนดีกว่าผมซะอีก เห็นว่ายังไงก็แนะนำกันได้นะครับ แล้วเจอกันใน Entry ถัดไปนะครับ (กะว่าจะอธิบายสั้นๆนะ ทำไมมันยาวไปซะได้ละเนี่ย เหอๆ)
Let’s talk about first thing, which you must know before start to iPhone application development, It’s MVC Design Pattern
In fact, You can find an article about MVC very easy from internet. Thai and English both. Each articles will explain about MVC in term of any language and framework such as MVC on PHPCake(PHP) or MVC on Ruby on Rails(Rails). So, I’ll explaining MVC in term of Cocoa Framework .
Let’s start
MVC Design Pattern is one Design Pattern in “Architecture Level” which popular in “Large scale application design” in this time. MVC is stand for Model-View-Controller which explain self structure from name is “Separate an element of application to 3 parts”. Each part is work together like in illustrate.

Cocoa MVC - ภาพจาก Apple.com
From the illustrate, you see Application separate in 3 parts is “View” and “Model” is connected by controller. How its work?
Model is data storage part. Such as Database or Data source in table in application. Model part is can be include state of application like preference setting not only “Information”.Model must have a “Model logic” inside. Model logic is a “Condition for storage”, how to storage?, which type and etc (we’ll talk about this again in “Property list in Objective-C 2.0 entry). A load of Model is not more than “storage” and “retrieve” a data. Not more than that.
View is a show result part. Same as “Model” a load of View is not more than “Show result” and “Wait for action”. A well-known View is GUIs. Inside View must have “View Logic” like Model too. Model Logic is an attribute for display such as Dimension (height-width), button style, font color and etc.
Controller is a connection part with “Model” and “View”. Say an easier is a “User Logic” or “Action Logic”. Because its controlled an action of user to do on application. What user can do ?. When got an action, What should application do ? , This is Controller load.
In Cocoa Framework still has one object type called “Hybrid Model”. Its a Model which have controller integrated. Because maybe a separate in 3 part like MVC is not good solution for all. For example for “Hybrid model” on Cocoa such as “Array Controller” and in iPhone App Dev is such as “Image Picker”. We’ll say again in later.
I finished entry about MVC only this. You can read MVC article from other place (somewhere can explain better than me). See you again in next Entry.
4 comments มกราคม 24, 2009
Cocoa & iPhone Development : Introduction to iPhone Development
ตอนนี้ผมมีหัวเรื่องเกี่ยวกับการเขียน App บน iPhone เพียบเลย เพราะเพิ่งจะเขียนแอพไอโฟนเสร็จไปตัวนึง เป็น Twitter Client ครับ ยังไม่มีอะไรมากเพราะเป็นแค่แอพที่ทดลองเขียนตาม Assignment ของ CS193P iPhone App Dev ของ Stanford ที่เคยโพสไว้ Entry ก่อนนี้
เมื่อก่อน Entry เกี่ยวกับ Cocoa ของผมดูเหมือนจะไม่ค่อยได้รับความสนใจเท่าไหร่ อันนี้ผมก็ไม่แปลกใจ เพราะบ้านเราใช้ .net framework แทบจะเป็นหลักในการพัฒนาแอพ(เพื่อโปรเจคจบหรือขาย) บวกกับบ้านเราคนใช้เครื่องแมคก็ไม่ได้มากมายอะไร แถม Developer บนแมคยิ่งน้อยใหญ่เลย
แต่ตอนนี้ อะไรๆมันเริ่มเปลี่ยนไป หลายๆคนสนใจการพัฒนาแอพด้วย Cocoa Framework ไม่ใช่เพื่อเครื่องแมค แต่เพื่อ “iPhone” นั่นเอง ใน Entry ก่อนหน้านี้ที่ผมเขียนเรื่อง “การสร้างปุ่มแบบ Run-Time บน iPhone” ปรากฎว่ามีผู้สนใจสอบถามเรื่องเกี่ยวกับการพัฒนาแอพบน iPhone เพราะจะทำเป็นโปรเจคจบ ผมก็เลยคิดว่า งั้นผมจะเขียน Entry เกี่ยวกับการพัฒนาแอพบน iPhone เป็นบทๆไปด้วย นอกจากที่เขียนเป็นทิปๆไป คิดว่าน่าจะมีประโยชน์กับผู้สนใจและเอาไว้แลกเปลี่ยนความรู้กันไปอีกทางนึง
เกริ่นมาเนิ่นนานแล้ว เริ่มเลยแล้วกันนะครับ !!
Chapter 0 : Before we’re start | ก่อนจะเริ่ม
ก่อนที่เราจะเริ่มการพัฒนาแอพบน iPhone นั้น ก็ต้องเตรียมตัวกันก่อนครับ เช็คตัวเองกันนะครับว่ามีสิ่่งเหล่านี้หรือยัง
1. Mac Computer : นี่ไม่ได้มาโฆษณานะครับ แต่มันจำเป็นต้องมี สิ่งแรกที่ขาดไม่ได้คือ เครื่องแมค (intel คงไม่มีปัญหา แต่ PPC ผมว่ามันคงจะอืดน่าดู) ต้องแสดงความเสียใจให้กับสาวก Windows นะครับ เพราะ Apple ไม่ได้ออก SDK For Windows มาให้
แต่ก็ไม่ได้ผูกขาดซะทีเดียวนะครับ Opensource iPhone’s Library ก็มีอยู่เหมือนกัน ติดแต่ตรงที่ทำงานบน Linux, ไม่มี Simulator, ไม่มี IDE ดีๆ ฯลฯ ซึ่งกว่าจะเสร็จงานก็คงตกยุคไปซะก่อน แต่ถ้าอยากลองก็ไม่ได้ว่ากันนะครับ เข้าไปดูรายละเอียดจากหนังสือ “iPhone Open Application Development: Write Native Objective-C Applications for the iPhone by Jonathan Zdziarski” กันได้
2. ความรู้เรื่องภาษา Objective-C : Objective-C เป็นภาษาหลักในการพัฒนาแอพบน iPhone ครับ เท่าที่รู้ตอนนี้ ยังไม่มีภาษาอื่นๆ ถ้าอยากรู้ว่ายากหรือแตกต่างกับ C หรือ C# มั้ย ถ้าเป็นเมื่อก่อนคงบอกว่าไม่มาก แต่หลังจากปีที่ผ่านมาที่ Apple ปล่อย Objective-C 2.0 ออกมา ก็คงต้องบอกว่า ต่างกันอยู่เหมือนกัน แต่ก็ไม่ได้มากมาย เรื่อง Objective-C จะพูดอีกตอนหลังนะครับ
3. ความรู้เรื่อง Object-Oriented Programming : จะว่าไปก็ไม่ใช่จำเป็นแค่เฉพาะกับการ Programming แค่บน iPhone หรอกนะครับ แต่จำเป็นกับการ Programming ในปัจจุบันเลยทีเดียว ถ้ายังไม่แม่นไม่แข็งก็ต้องฝึกกันไปนะครับ เขียนบ่อยๆต่อไปก็จะเก่งขึ้นเรื่อยๆเอง โดยเฉพาะหัดเขียนบน Cocoa หรือ Cocoa Touch Framework อันนี้ช่วยให้เรียนรู้มากครับ เพราะบังคับให้เราเขียนแบบ OOP ทั้งหมด
4. ความรู้เรื่อง MVC Design Pattern : อันนี้ก็สำคัญครับ ปัจจุบัน MVC เป็น Design Pattern ที่ได้รับความแพร่หลายมากในการพัฒนา Application เพราะสามารถแก้ไข จัดการ หรือขยายสเกลของงานได้ง่าย ซ่ึงปัจจุบัน Application ทั้งหลายก็ออกแบบด้วย Design Pattern นีเป็นส่วนมากนะครับ
หลักๆเลยก็จะมีส่ีอย่างนี้นะครับ ที่จะต้องมีเพื่อการพัฒนา iPhone Application สำหรับหัวข้อที่ 2-4 สามารถหาศึกษาได้ทั่วไปนะครับ หรือถ้าอยากอ่านจากหนังสือ ก็แนะนำ Cocoa(R) Programming for Mac(R) OS X (3rd Edition) by Aaron Hillegass ครับ เล่มนี้ถือว่าเป็นไบเบิลของ Cocoa Programming เลยก็ว่าได้ หรือถ้าบนเวบก็เข้าไปที่ Developer Connection ของ Apple ได้ครับ
ในบททนี้ก็จบไว้เท่านี้ก่อนแล้วกันนะครับ สำรวจตัวเองกันพร้อมแล้ว ก็เจอกันบทถัดไปครับ ;)
Now, I have a many topic about iPhone application programming. Because I’m just finished written the first iPhone application. It’s twitter’s client application. It not have a many features because I try to do from Stanford’s course, CS193P : iPhone app dev. And I ever says about this course in entry before.
From the past, Entry about Cocoa programming look like not have a person who interested in. But I’m not surprise, Because .net framework is more popular for application development (for grad’s project or commerce). And a mac user group in Thailand is not much and don’t say about mac developer, It’s really small.
But now. Many things is change. Many developer interesting an application development on Cocoa Framework. Not for Mac but for iPhone. From before this entry, I write about “How to create a button on Run-Time on iPhone” and have a comment from person who interest in iPhone development (He’ll do for grad’s project). So, I think I should write an Entry about “iPhone Development” as chapter over and above only “Programming Tip”. I hope it useful for who interest and for exchange knowledge.
Says for a long time. Lets start!!
Chapter 0 : Before we’re start
Before we start to iPhone Application Development. Check yourself. Do you have these thing ?
1. Mac Computer : I’m not an apple’s reseller but it essential. A first thing which you must had is Mac Computer (Intel is no prob but PPC I’m not sure, It’ll very slow). Say sorry to Windows users because Apple not release iPhone SDK for Windows.
But not fully monopolize. It’s have opensource iPhone Library too. But It’s work on Linux, Not have simulator, Not have a good IDE and etc. I think it’ll waste of time. But if you interest, Can look on this book ”iPhone Open Application Development: Write Native Objective-C Applications for the iPhone by Jonathan Zdziarski”
2. Knowledge about Objective-C : Objective-C is a main programming-language for iPhone Application Development. For other, I’m not sure. Obj-C will not same as C# after Apple release Obj-C 2.0. About Obj-C I’ll say later.
3. Knowledge about Object-Oriented Programming : Not only for iPhone App Dev but for current programming. If you not understand, you must try. Hard practice is better for you especially practice on Cocoa or Cocoa Touch Framework. It’s help you more understand about OOP because it force you to done everything as object.
4. Knowledge about MVC Design Pattern : It’s essential too. Now MVC is a popular design pattern for application because it easy to manage and enlarge a work scale in later version. Now all of application design on MVC Design Pattern.
For a main is these 4 things which you must have before application development for iPhone for 2-3 choice you can read from general in internet. Or if you want to read from book, I recommend Cocoa(R) Programming for Mac(R) OS X (3rd Edition) by Aaron Hillegass. This book is like as a Bible for Cocoa Programming. Or read from developer Connection of Apple.
3 comments มกราคม 22, 2009
Cocoa & iPhone Development : Add UIButton in Runtime
แบบภาษาไทย
สำหรับผู้ที่ศึกษาการเขียนโปรแกรมด้วย Cocoa Framework หรือ Cocoa Touch Framework และ Objective-C ส่วนมากจะคุ้นเคยกับการสร้างปุ่มโดยการวางลงไปในหน้า View ของเราที่อยู่ในหน้า Interface Builder แล้วก็สร้าง Action ขึ้นมาในคลาสแล้วก็ลากเชื่อม Action กับปุ่มที่เราสร้างขึ้นใช่มั้ยครับ
อันนั้นเป็นวิธีการสร้างปุ่มแบบ Static ใน Compile-Time ซึ่งไม่มีอะไรยุ่งยากซับซ้อน เพราะตัว XCode และ IB สามารถทำงานร่วมกันได้เป็นอย่างดีอยู่แล้ว ข้อดีของมันคือง่ายไม่ซับซ้อน แต่บางครั้งเราอาจต้องการปุ่มที่มีความยืดหยุ่นมากกว่า เช่น ปุ่มที่สามารถเลือกได้ว่าในขณะนั้นมันควรเลือกใช้ Method ไหนกันแน่ภายใต้เงื่อนไขนั้นๆ ดังนั้น ใน Entry นี้จะกล่าวถึงการสร้างปุ่มที่จะถูกสร้างและแสดงผลในช่วง Runtime
อันนี้จะเป็นตัวอย่างการสร้างปุ่มใน UIKit ของ Cocoa Touch Framework นะครับ
เริ่มต้นการสร้างปุ่มก่อนเป็นอย่างแรก
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
เท่านี้เราก็จะได้ปุ่มแบบ RoundedRect แสดงผลอยู่หน้าหลักของเราแล้วนะครับ เราสามารถที่จะปรับขนาดและตำแหน่งที่ต้องการได้ โดยเซต property frame ของปุ่มของเรา หรือคุณสมบัติอื่นๆก่อนนำไปแสดงผลได้นะครับ ซึ่งสามารถดูได้ในหน้า Reference ตัวอย่างเช่นการเซต property frame ทำแบบนี้นะครับ
button.frame = CGRectMake( พิกัด X, พิกัด Y, ความกว้าง, ความสูง)
เราได้ปุ่มมาแล้ว ต่อไปเป็นการกำหนดว่าปุ่มนั้นจะเรียก Method อะไรเมื่อถูกกด กำหนดแบบนี้ครับ
[button addTarget:self action:@selector(Method ที่ต้องการจะให้ทำ) forControlEvents:(UIControlEvent)แอคชั่นบนปุ่ม];
เอาละครับ เรากำหนดคุณลักษณะต่างๆเรียบร้อยแล้ว (อาจกำหนดคุณสมบัติอื่นๆได้อีก แต่ไม่ขอเขียนในนี้นะครับ) คราวนี้ขั้นตอนสุดท้ายก็คือ นำไปแสดงผล แบบนี้ครับ
[self.view addSubview:button];
เท่านี้เราก็ได้ปุ่มที่ถูกสร้างขึ้นในช่วง Runtime เรียบร้อยแล้วครับ ไม่ยากเลย
Happy Coding นะครับ.
In english version.
For the people who study about programming on “Cocoa Framework” or “Cocoa Touch Framework” and Objective-C will known how to create a button on a view of Interface Builder’s page. You’ll drag a button from Library and drag the line, connect between button and method in class which you created.
That solution is a way to create a static button in Compile-Time. It easy and not complex because XCode and IB can work good together. But sometime we’ll want a more flexible button such as button which can select a method under condition in each time. So, I’ll saying in this entry about a how to create a button in runtime.
This example is for UIKit on Cocoa Touch Framework/
At first. We must create a button.
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundRect];
now We got a button . We can customize many property about button such as size, position, title orimage and etc. You can read from reference document. Now, I’ll show you how to set frame(size and position) of button. Do like this.
button.frame = CGRectMake( XPosition, YPosition , Width, Height);
When we finished customize button. Next, We’re assigning which method that our button do when got an action from user. We do like this.
[button addTarget:self action:@selector(Method) forControlEvents:(UIControlEvent)Action];
Finally. We show our button on the view by this method.
[self.view addSubview:button];
Just only, We got a button which created on runtime . Very easy.
Happy Coding
1 comment มกราคม 15, 2009
CS193P : iPhone Application Development
ช่วงนี้กำลังง่วนๆอยู่กับการหัดเขียน Application บน iPhone ครับ แรกๆคิดว่าไม่น่าจะแตกต่างอะไรกับการพัฒนา Application บน Mac แต่เอาเข้าจริง ก็ไม่หมูอย่างที่คิด เพราะไม่เหมือนกับ Cocoa ซะทีเดียว มีรายละเอียดต่างๆที่ต้องเก็บเพิ่มเติมมากขึ้น โดยเฉพาะการจัดการ Memory ที่ต้องทำให้มีประสิทธิภาพและต้องจัดการด้วยตัวเอง ทั้งที่เขียนด้วย ObjC 2.0 แต่บน iPhone ก็หมดสิทธิ์ใช้ GC (Garbage Collector) อยู่ดี และยังมีส่วนอื่นๆที่ยังไม่ขอพูดถึงในที่นี่
หลังจากที่ Apple ยกเลิกสัญญา NDA (สัญญาเกี่ยวกับการเผยแพร่ข้อมูลการพัฒนา Application บน iPhone) หนังสือ บทความต่างๆก็เริ่มผุดออกมาเป็นดอกเห็ด ซึ่งก็นับว่าเป็นเรื่องดีของ Developer อย่างเราๆ ซึ่งก็นับรวมถึง Course IPhone Application Development ของ มหาวิทยาลัย Stanford ด้วย
หลังจากที่ผมรู้ข่าวเรื่องที่ Stanford ปล่อย Lecture รายวิชานี้ออกมาให้ดูกันได้แล้ว ผมก็แทบจะเข้าไปดูทันที และพบว่า “มันน่าสนใจมากๆ” Course นี้เหมาะสำหรับผู้ต้องการเริ่มต้นพัฒนา Application บน iPhone จริงๆครับ เพราะเริ่มสอนตั้งแต่คอนเซปต์เริ่มต้น เช่น OOP และ Design Pattern แต่ก็บอกตามตรงว่า “สำหรับคนที่ไม่มีพื้นฐานเกี่ยวกับ ObjC หรือ Cocoa กว่าจะได้ Assignment นึงคงจะเหนื่อยพอดูเลย เพราะยากเอาเรื่อง” แต่ก็ถือว่าเป็นจุดที่ดีสำหรับการเริ่มต้น แนะนำครับ
ตอนนี้ผมอ่านไปได้ 5 Lecture แล้ว และได้เพิ่มเติมความรู้ต่างๆขึ้นเยอะเลย ไม่เฉพาะ iPhone app dev แต่รวมไปถึง Cocoa ด้วย ถือเป็นการเติมพื้นฐานให้แน่นยิ่งขึ้นไปด้วยครับ สำหรับผู้สนใจ ลองเข้าไปดูกันได้นะครับ CS193P : iPhone Application Development
อ่านแล้วก็รู้สึกว่าการศึกษาของเขามันไม่เหมือนของไทยเราเลยนะ ของเขาเน้นให้เด็กศึกษาและลองทำล่วงหน้าของคาบถัดไป แล้วคาบถัดไปก็ค่อยมาดูกันว่าทำถูกผิดยังไง ก็ว่ากันไป ไม่เหมือนกับไทย ที่เน้นทบทวนที่เคยสอนเคยพูดไปแล้วในคาบ แล้วก็เน้นโค้ดเน้นการอินพลีเมนต์เป็นเคสๆไป ลองศึกษาแบบต่างประเทศบ้างก็ได้ประโยชน์อยู่ไม่น้อยนะเนี่ย
1 comment พฤศจิกายน 16, 2008
บันทึกการผ่าตัดของน้องไมท์ครั้งที่ 3 : น้องไมท์ถูกฆาตกรรม!!!
เมื่อวานเป็นวันนึงที่วุ่นวายที่สุดในรอบสามวันของผม ไหนจะต้องประชุมบริษัท ไหนจะต้องจัดการธุระเรื่องเงิน และ ไหนจะต้องทำงาน วุ่นวายไปหมด ระหว่างผมประชุม ผมก็ปล่อยน้องไมท์อยู่กับน้องแมคไป และผมก็ไปจัดการกับชีวิตที่วุ่นวายตามเรื่องตามราว
ประชุมเสร็จผมก็ออกไปธนาคาร และเมื่อกลับมาผมก็เจอภาพไม่คาดฟัน น้องไมท์ผมนอกแยกออกเป็นสามส่วนอีกแล้ว !!เฮ้ย ได้ไงเนี่ย ก่อนผมออกไปยังอยู่ดีๆเลยนี่หว่า สืบสาวราวเรื่องก็ได้ความว่า “น้องไมท์ผมโดนซ้อเกดฆาตรกรรม” ทำร่วงลงมาจากโต๊ะซะงั้นอ่ะ เหมือนตอนคราวที่แล้วเลย ฮืออออ
ผลก็จัดการรักษาน้องไมท์แบบเดิมเลยครับ คราวนี้ทำได้เร็วกว่าเดิมและไม่เหนื่อยเหมือนคราวก่อน เพราะอุปกรณ์มีครบมือ กาวพร้อม คีมหนีบพร้อม จัดการต่อส่วนที่หักแล้วไปผึ่งพัดลม รอให้แห้งสนิทดี ระหว่างรอก็อ่านการ์ตูนจบไปเล่มนึง ก็มาประกอบกลับ เหมือนเดิมครับ แต่คราวนี้รู้สึกจะเละกว่าเดิมมากๆ กาวหกไปโดนตรงโน้นตรงนี้ เปื่อยเลยครับ แถมยังดูไม่ค่อยสมบูรณ์เหมือนเดิมเท่าไหร่ด้วย มันก๊อกแก๊กๆยังไงชอบกล แต่ก็ยังดีกว่าโดนแยกเป็นสามส่วนแบบนั้นหล่ะนะ
…กลัวว่าถ้าน้องไมท์ตกอีกทีนึง ผมจะได้ตัดสินใจว่าจะใช้น้องไมท์ตัวใหม่หรือหาอย่างอื่นมาใช้อื่นแล้วเนี่ย
* น้องไมท์ = น้องไมท์ตี้ เมาส์
* น้องแมค = น้องแมคบุค
Add comment กรกฎาคม 9, 2008
