-Xcode3.2.3과 SDK4로 업그레이드 후, 기존 앱 업그레이드 하는 법-
XCode3.2.3 과 SDK4로 버전업한 후, 기존 앱을 업그레이드 할 때 간단한 Tip 입니다.
1. XCode3.2.3과 SDK4로 업그레이드 한다. 별도로 기존 XCode 3.1 버전을 따로 보관할 필요가 없습니다.
2. 기존 앱을 새 XCode3.2.3에서 연다.
3.Group & Files를 right click -> Get Info 후
  3-1.General Tab 에서
Project Format 을 Xcode 3.2-compatible 로 바꾼다.
 3-2.Build Tab 에서
 Base SDK를 iPhone Device 4.0(배포시), 혹은 iPhone Simulator 4.0(테스트시) 로 바꾼다
 iPhone OS Deployment Target 을 iPhone OS 3.0 (즉 지원하고자 하는 하위버전으로) 로 바꾼다.

출처 : http://blog.naver.com/PostView.nhn?blogId=megaissue&logNo=140111719543
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 10. 12. 04:09
Timer를 이용해서 재귀 반복 하는 소스

- (void)makeMyProgressBarMoving {

float actual = [threadProgressViewprogress];

threadValueLabel.text = [NSString stringWithFormat:@"%.2f", actual];

if (actual < 1) {

threadProgressView.progress = actual + 0.01;


                         selector:@selector(makeMyProgressBarMoving) userInfo:nilrepeats:NO];


elsethreadStartButton.hidden = NO;


아이폰 어플 개발할때, timer를 이용해서 재귀호출하는 방법이다.

위의 함수는 progress Bar의 막대를 채우는 것으로, 재귀호출되면서 값이 증가되도록한다.

makeMyProgressBarMoving함수가 타이머가 0.5간격으로 울릴때, 다시 자신을 호출하며

0부터 0.01이 호출될때마다 더해져서 1이 되기전까지 계속된다.

재귀호출 중단점은 progress값이>1되면 중단된다.

Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 10. 12. 04:04
복잡한 SQLite3 간단하게 하는 클래스
This library is more suitable for smaller databases as right now is automatically transforming all the data from select into the NSMutableArray where every row has it's Own NSMutableDictionary. This is not the best idea if you have loads of data, because that you have all the data in the variable and that means that it eats all your memory and application crashes.

To get some data from database is as easy as that:

  1. NSMutableArray *arr = [conn getData:@"SELECT * FROM testTable;" fromDatabase:@"testDatabase"];  


Now I'll show you how easy is to connect to the database and retrieve some data.

  1. //
  2. //  ContactsController.h
  3. //  TestApp
  4. //
  5. //  Created by Ondrej Rafaj on 26.10.09.
  6. //  Copyright 2009 Home. All rights reserved.
  7. //
  8. #import 
  9. #import "SQLite3Connector.h"
  10. @interface ContactsController : UIViewController {  
  11.     IBOutlet UITableView *table;  
  12.     IBOutlet UIActivityIndicatorView *preloader;  
  13.     NSMutableArray *data;  
  14.     SQLite3Connector *conn;  
  15. }  
  16. @property (nonatomic, retain) IBOutlet UITableView *table;  
  17. @property (nonatomic, retain) IBOutlet UIActivityIndicatorView *preloader;  
  18. @property (nonatomic, retain) NSMutableArray *data;  
  19. @end  

We've included the SQLite3Connector class into the project and we've created tableView and activity indicator as a preloader, than we have the data variable where we are going to have all the results from the database. Last thing is a class SQLite3Connector which allows you to do all the queries.

  1. //
  2. //  ContactsController.m
  3. //  TestApp
  4. //
  5. //  Created by Ondrej Rafaj on 26.10.09.
  6. //  Copyright 2009 Home. All rights reserved.
  7. //
  8. #import "ContactsController.h"
  9. @implementation ContactsController  
  10. @synthesize table, preloader, data;  
  11. /* 
  12. - (id)initWithStyle:(UITableViewStyle)style { 
  13.     // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
  14.     if (self = [super initWithStyle:style]) { 
  15.     } 
  16.     return self; 
  17. } 
  18. */
  19. - (void) importDataFromContacts {  
  20.     // creating fake data for import
  21.     [conn executeQuery:@"INSERT INTO contacts (name, surname) VALUES ('Ondrej', 'Rafaj');" inDatabase:@"contacts"];  
  22.     [conn executeQuery:@"INSERT INTO contacts (name, surname) VALUES ('Hana', 'Cerna');" inDatabase:@"contacts"];  
  23.     [conn executeQuery:@"INSERT INTO contacts (name, surname) VALUES ('Andrew', 'Walker');" inDatabase:@"contacts"];  
  24.     [conn executeQuery:@"INSERT INTO contacts (name, surname) VALUES ('Greg', 'Jarrett');" inDatabase:@"contacts"];  
  25.     [conn executeQuery:@"INSERT INTO contacts (name, surname) VALUES ('Chris', 'Doull');" inDatabase:@"contacts"];  
  26.     [conn executeQuery:@"INSERT INTO contacts (name, surname) VALUES ('Malc', 'Seaborn');" inDatabase:@"contacts"];  
  27.     [conn executeQuery:@"INSERT INTO contacts (name, surname) VALUES ('Jidh', 'George');" inDatabase:@"contacts"];  
  28. }  
  29. - (void)viewDidLoad {  
  30.     [super viewDidLoad];  
  31.     [preloader startAnimating];  
  32.     conn = [[SQLite3Connector alloc] init];  
  33.     if ([SQLite3Connector databaseExists:@"contacts"]) [SQLite3Connector dropDatabase:@"contacts"];  
  34.     NSString *query = @"";  
  36.     if (![conn executeQuery:query inDatabase:@"contacts"]) NSAssert1(0, @"Error creating database. (%@)", query);  
  37.     [self importDataFromContacts];  
  38.     NSLog(@"Creating database & importing contacts");  
  39.     data = [conn getData:@"SELECT * FROM contacts ORDER BY surname ASC;" fromDatabase:@"contacts"];  
  40.     [table reloadData];  
  41.     [preloader stopAnimating];  
  42. }  
  43. - (void)didReceiveMemoryWarning {  
  44.     // Releases the view if it doesn't have a superview.
  45.     [super didReceiveMemoryWarning];  
  46.     // Release any cached data, images, etc that aren't in use.
  47. }  
  48. - (void)viewDidUnload {  
  49.     // Release any retained subviews of the main view.
  50.     // e.g. self.myOutlet = nil;
  51. }  
  52. #pragma mark Table view methods
  53. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {  
  54.     return 1;  
  55. }  
  56. // Customize the number of rows in the table view.
  57. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {  
  58.     return [data count];  
  59. }  
  60. // Customize the appearance of table view cells.
  61. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
  62.     static NSString *CellIdentifier = @"Cell";  
  63.     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  
  64.     if (cell == nil) {  
  65.         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];  
  66.     }  
  67.     int index = [indexPath indexAtPosition: [indexPath length] - 1];  
  68.     cell.textLabel.text = [NSString stringWithFormat:@"%@, %@", [[data objectAtIndex: index] objectForKey: @"surname"], [[data objectAtIndex: index] objectForKey: @"name"]];  
  69.     return cell;  
  70. }  
  71. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {  
  72.     // Navigation logic may go here. Create and push another view controller.
  73.     // AnotherViewController *anotherViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherView" bundle:nil];
  74.     // [self.navigationController pushViewController:anotherViewController];
  75.     // [anotherViewController release];
  76. }  
  77. - (void)dealloc {  
  78.     [table, preloader, data release];  
  79.     [super dealloc];  
  80. }  
  81. @end  

Check out the importDataFromContacts and viewDidLoad functions ... here you can see that the handling SQLite is quite piece of cake.

All the source codes are available on the google code here:

Here is a little bit more extended example of what you can do with it, please don't worry about the printResults function, I just took part of the example project as I don't have a time right now to prepare anything better (I want to go home, I'm still stucked in the office and right now is 21:45), ok here we go:

  1. - (void) printResults:(NSString *)text {  
  2.     counter++;  
  3.     textView.text = [NSString stringWithFormat:@"%d) %@\r\n\r\n%@", counter, text, textView.text];  
  4. }  
  5. // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
  6. - (void)viewDidLoad {  
  7.     [super viewDidLoad];  
  8.     counter = 0;  
  9.     SQLite3Connector *conn = [[SQLite3Connector alloc] init];  
  10.     //[conn getData:@"" fromDatabase:@""];
  11.     NSString *queryCount = @"SELECT COUNT(id) FROM testTable;";  
  12.     [self printResults:[NSString stringWithFormat:@"Directory path: %@", [SQLite3Connector getDocumentsDirectoryPath]]];  
  13.     [self printResults:[NSString stringWithFormat:@"Database folder path: %@", [SQLite3Connector getDatabaseFolderPath]]];  
  14.     [self printResults:[NSString stringWithFormat:@"Database file name: %@", [SQLite3Connector getDatabasePathFromName:@"testDatabase"]]];  
  15.     [self printResults:[NSString stringWithFormat:@"Escape string (it's): %@", [SQLite3Connector escapeString:@"it's"]]];  
  16.     //[self printResults:[NSString stringWithFormat:@"Dropping database: %d", [SQLite3Connector dropDatabase:@"testDatabase"]]];
  17.     [self printResults:[NSString stringWithFormat:@"Database exists: %d", [SQLite3Connector databaseExists:@"testDatabase"]]];  
  18.     NSString *query = @"CREATE TABLE IF NOT EXISTS testTable (id INTEGER PRIMARY KEY AUTOINCREMENT, data TEXT);";  
  19.     [self printResults:[NSString stringWithFormat:@"Creating table: %d", [conn executeQuery:query inDatabase:@"testDatabase"]]];  
  20.     [self printResults:[NSString stringWithFormat:@"Database size: %@", [SQLite3Connector getDatabaseFormatedFileSize:@"testDatabase"]]];  
  21.     //[self printResults:[NSString stringWithFormat:@"Dropping table: %d", [conn dropTable:@"testTable" inDatabase:@"testDatabase" useVacuum:YES]]];
  22.     //[self printResults:[NSString stringWithFormat:@"Creating table: %d", [conn executeQuery:query inDatabase:@"testDatabase"]]];
  23.     //[self printResults:[NSString stringWithFormat:@"Database size: %@", [SQLite3Connector getDatabaseFormatedFileSize:@"testDatabase"]]];
  24.     //[self printResults:[NSString stringWithFormat:@"Database exists: %d", [SQLite3Connector databaseExists:@"testDatabase"]]];
  25.     query = @"INSERT INTO testTable (data) VALUES ('Test Data (It''s)');";  
  26.     [self printResults:[NSString stringWithFormat:@"Inserting into the table: %d", [conn executeQuery:query inDatabase:@"testDatabase"]]];  
  27.     //[self printResults:[NSString stringWithFormat:@"Truncate table: %@", [conn truncateTable:@"testTable" inDatabase:@"testDatabase"]]];
  28.     [self printResults:[NSString stringWithFormat:@"Inserting into the table: %d", [conn executeQuery:query inDatabase:@"testDatabase"]]];  
  29.     [self printResults:[NSString stringWithFormat:@"Database size: %@", [SQLite3Connector getDatabaseFormatedFileSize:@"testDatabase"]]];  
  30.     [self printResults:[NSString stringWithFormat:@"Inserting into the table: %d", [conn executeQuery:query inDatabase:@"testDatabase"]]];  
  31.     [self printResults:[NSString stringWithFormat:@"Table exists: %d", [conn tableExists:@"testTable" inDatabase:@"testDatabase"]]];  
  32.     [self printResults:[NSString stringWithFormat:@"Database size: %@", [SQLite3Connector getDatabaseFormatedFileSize:@"testDatabase"]]];  
  33.     [self printResults:[NSString stringWithFormat:@"Table exists: %d", [conn tableExists:@"testTable" inDatabase:@"testDatabase"]]];  
  34.     [self printResults:[NSString stringWithFormat:@"Count rows in the table: %d", [conn executeScalar:queryCount inDatabase:@"testDatabase"]]];  
  35.     NSMutableArray *arr = [conn getData:@"SELECT * FROM testTable;" fromDatabase:@"testDatabase"];  
  36.     NSLog(@"%@", arr);  
  37.     [conn release];  
  38. }  
  39. http://www.xprogress.com/post-38-new-sqlite3-handling-library-for-iphones-and-cocoa-now-under-development/
Posted by 오늘마감

댓글을 달아 주세요

아이폰기본사용2010. 7. 5. 08:15
Cydia 로딩 속도를 빠르게 하는 법
1. Cydia를 실행합니다.

    2. 두번째 Section탭을 선택후 edit를 눌러줍니다.

      3. 여러가지 항목중 많은양을 차지하고 있는 Ringtones, Themes를 Off로 체크해줍니다.

      4. 두가지만 체크를 해제해도 로딩속도가 두배는 빨라지는걸 느낄수 있습니다.

      저는 Ringtones, Theme, FontSwap 해제했는데 속도 엄청 빨라졌네요. ㅎㅎ

      시디아에서 테마나 벨소리는 잘 안받기 때문에 별 상관없을듯 합니다!

      출처 : http://blog.naver.com/PostView.nhn?blogId=jkw1120&logNo=60107781412
      Posted by 오늘마감

      댓글을 달아 주세요

      아이폰어플정보2010. 7. 1. 08:28
      무모한 질주를 하는 햄스터를 지키자! - Crazy Hamster (아이폰 게임, 아이팟터치 게임)

      미친 햄스터 - Crazy Hamster

      앱스토어 평점 : 3.0 / 5.0

      앱스토어 연결 : 무료버전, 유료버전 0.99$

      귀엽지만 머리가 살짝 돌아버린, 자기가 햄스터가 아닌 레밍인줄 아는 미친 햄스터를 안전하게 목적지에 인도하는 동물보호(?) 게임입니다.

      절벽, 모닥불, 강, 함정, 가시, 덫등 수많은 장애물들이 햄스터 앞길을 막고 있지만 이 미친 햄스터가 물불을 안가리고 무조건 질주합니다. 가만 놔두면 죽어버리니 빨리 도와줘야 합니다. 당한 기억력과 순발력을 요구하는 게임으로 클리어 하다보면 햄스터가 싫어질지도 모르겠습니다.

      깔끔한 타이틀과 스테이지 설렉트 화면입니다. 하지만 스테이지 설렉트 UI가 약간 불편한데요. 이것저것 생각할 것 없이 SELECT 버튼을 누릅시다.

      게임UI를 간단히 소개하면

      좌측상단에 점수, 중앙상단에 제한시간(제한시간이 별 의미 없습니다. 어차피 한번만 실수하면 처음부터 다시 해야 하고 실수하지 않으면 클리어 하기 때문입니다.), 측상단에 남은 도전횟수가 있습니다.

      좌측하단에 일시정지 버튼이 그 옆으로 장애물들을 피할 수 있게 해주는 아이템들이 나열되 있습니다.

      이 아이템들을 적절히 사용해 햄스터를 위험해서 벗어나게 하고 무식한 질주를 도와줘야 하는 것입니다.

      아이템들을 자세히 보면 좌측하단에 숫자가 적혀 있는데 사용갯수를 뜻합니다. 이 갯수만큼 장애물이 나온다는 뜻이며 장애물과 아이템수는 1:1 매칭이므로 앞으로 어떤 장애물을 나올지 미리 예측할 수 있습니다.

      아이템 사용은 아이템을 터치(선택)하고 장애물에 터치(사용)하면 됩니다. 장애물이 나올 때 마다 아이템 터치, 장애물 터치, 아이템 터치, 장애물 터치를 반복해야 하기 때문에 상당한 순발력이 필요합니다. 그리고 장애물과 매칭되는 장애물을 기억해 놔야 하니 기억력도 필요합니다. 한번만 실수해도 처음부터 다시~~ 입니다. 긴장하세요.

      게임을 시작하면 햄스터가 미친듯이 달리기 시작합니다. 앞에 장애물이 있어도 무조건 달리기만 하니 열심히 장애물들을 처리해 줘야 합니다.

      강이 나타나면 돗단배를 띄워 햄스터가 배타고 건너가게 해줘야 합니다. 모닥불이 나오면 소화기로 불을 꺼줘야 하고요.

      강 : 돗단배

      모닥불 : 소화기

      가시, 덫 : 덤블링 (점프해서 넘어감)

      길쭉한 가시나 연속된 덫 : 덤블링 + 헤어드라이 (점프한 후 헤어드라이를 사용하면 바람으로 조금 더 멀리 점프합니다.)

      절벽 : 낙하산

      높은 곳 : 사다리

      빠지는 함정 : 널판지

      잘 기억하시고 장애물에 맞는 아이템을 사용합시다.

      절벽이 나왔어요. 낙하산으로 내려갑니다. 덫이 나왔어요. 덤블링으로 점프합니다.

      제일 어려운 장애물은 길쭉한 가시나 연속된 덫입니다. 덤블링을 놓은 다음 점프할 때 얼른 헤어드라이를 써야 하거든요. 정신없을 땐 정말 쥐약입니다. 아이템에 헤어드라이가 나오면 긴장합시다.

      높은 곳이 나왔습니다. 사다리로 올라갑시다.

      각종 장애물을 뚫고 목적지에 도달하면 게임 클리어 됩니다. 클리어 화면의 그래픽은 약간 떨어지는 군요. 개발자도 미친듯이 만들다가 지쳤나 봅니다. ^^ 개발자도 햄스터가 싫어졌을지도 모르겠네요.

      하여튼 레밍으로 착각한 미친 햄스터를 안전하게 보호해 봅시다.

      미국 앱스토어 기준으로 작성한 글입니다. 아이튠즈 연결도 미국 기준입니다. 미국 계정 생성방법은 구글 검색하시면 되며 유료버전 구입은 홍콩 계정을 이용하시거나 Gift Card를 사용하시면 됩니다

      출처 : http://blog.naver.com/PostView.nhn?blogId=ghostsbs&logNo=106724152
      Posted by 오늘마감

      댓글을 달아 주세요

      아이폰어플정보2010. 6. 26. 09:52
      아이폰,아이팟터치로 하는 불장난 - Zippo Lighter, Eternal Fire

      Eternal Fire iTuens 연결

      Virtual Zippo Lighter iTuens 연결

      Eternal Fire (불멸의 불)

      App이름 그대로 끝없이 타오르는 꺼지지 않는 불입니다. 그런데 아이폰을 끄면 꺼지는데요?

      화면을 터치하면 오른쪽처럼 설정화면이 나옵니다.

      모닥불 소리 크기와 불길 애니메이션 속도를 조절할 수 있습니다.

      이런 App을 왜? 만들었을까요? 정답은 다른App홍보용입니다. Information 탭을 선택하면 TMSoft에서 만든 App들을 볼 수 있습니다. Website는 TMSoft 와 연결되 있겠죠.

      Virtual Zippo Lighter (가상 지포라이터)

      App을 실행하자마자 Zippo라이터가 나옵니다. 실제 라이터로 불 키는 것 처럼..해 보세요.

      먼저 뚜껑을 터치하고 드래그 합니다.. 철컥~~소리와 함께 뚜껑이 열립니다.

      오른쪽에 달려 있는 부싯돌을 터치하고 아래로 드래그 합니다. 칫~~소리와 함께 불이 켜졌습니다..

      이리저리 흔들어 봅시다. 불꽃이 흔들거립니다.

      아이폰, 아이팟터치를 거꾸로 들어봅시다. 불꽃이 거꾸로 타오릅니다. 실제 라이터였다면? 뜨거웠겠죠?

      오른쪽 하단에 있는 i 자를 누르면 라이터 선택화면이 나옵니다. 맘에 드는 라이터를 선택한 후 켜보세요.

      이런 App을 왜? 만들었을까요? 정답은 Zippo 라이터 홍보용입니다. 다양한 디자인의 지포라이터를 가상으로 써보고 맘에 들면 구입하라는 거지요. 하지만 전 담배를 피지 않으므로 심심풀이(사람들에게 보여줄 용도)용으로만 쓸랍니다..

      아이폰, 아이팟터치용 App은 참~다양합니다. 한번 즐기고 지워버릴 수 있는 무료App으로 다른App 홍보용으로 쓴다던지..제품을 가상으로 동작하도록 해놓고 실제제품 홍보용으로 쓴다던지..하는 무료App들이 많습니다. (개발기간도 짧겠죠.)

      국내에도 이런류의 재밌는App들이 많이 개발되길 기대합니다.

      미국 앱스토어 기준으로 작성한 글입니다. 아이튠즈 연결도 미국 기준입니다. 미국 계정 생성방법은 구글 검색하시면 되며 유료버전 구입은 홍콩 계정을 이용하시거나 Gift Card를 사용하시면 됩니다.

      출처 : http://blog.naver.com/PostView.nhn?blogId=ghostsbs&logNo=95501501
      Posted by 오늘마감

      댓글을 달아 주세요

      아이폰어플개발정보2010. 6. 24. 11:39
      HTTP 서버에서 이미지를 다운로드 하는 방법

      by alex 28. 4월 2009 13:28

      //Download image from HTTP server

      NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com/intl/en_ALL/images/logo.gif"]];

      UIImage *image = [UIImage imageWithData:imageData];

      출처 : http://blog.naver.com/PostView.nhn?blogId=amoros21&logNo=140107111310
      Posted by 오늘마감

      댓글을 달아 주세요

      아이폰기본사용2010. 6. 23. 21:12
      아이폰으 프린터 하는 방법.

      아이폰으로도 프린터를 할수 있습니다.^^

      어플 이름은 ePrint free

      이름에서 나오듯이 무료입니다.

      위에 이쁘장한 아이콘이 보이네요.

      아이콘을 클릭~~

      실행화면이 아주 깔끔합니다.^^

      다 실행되고 나면 이렇게 나오는데요.

      우선 프린터를 추가 해야합니다.

      화면을 위로 올리면 아래에서 두번째에 프린터 추가있습니다.

      살짝 터치하여 추가 화면으로...ㄱㄱㄱ

      저는 벌써 이렇게 두개나 추가 했네요.

      여기서 터치~~

      자 여기 보시면 Printer 하고 빈칸에 위에처럼 프린터의 IP를 적어주시면 되요.

      Search Printers는 누르지 마시구요..눌러도 암것도 안나오더라구요.

      IP를 적었으면 Check 터치 <- 중요합니다.

      먼가가 뜨지만 실패라고 나오네요...

      무시하시고 OK 터치 하세요.

      짜잔..Model이 자동으로 검색해서 나오네요.^_^

      그렇지만 PDL 이 잘못 설정되어 있네요.

      대부분의 프린터는 PS 타입이 아니라 PCL 타입이죠.

      화면을 터치해서 변경해봅시다.

      화면을 터치하니 이렇게 여러가지가 나옵니다.

      그중에 필요한 PCL 터치하시면 위에처럼 체크가 됩니다.

      상단의 Done 터치하시면 설정이 된거예요.

      자 변경된거 보이시죠..^_^

      Add a Printer 터치해서 전단계로~~~ㄱㄱㄱ

      그러면 위와같이 파란색으로 IP와 Default라고 나오고,프린터 이름이 보이는군요.

      설치가 됐으니까 프린트를 해보죠.

      Main 터치...

      위에 Albums 앨범이 보이네요. 저장된 사진을 프린터하는거죠.

      Photo calendar는 저장된사진을 이용해서 달력을 뽑는거예요.

      저는 저장된 사진을 프린터 합니다.

      Albums 터치~~

      카메라 롤이 보이네요.

      터치해서 프린터할 사진을 선택하세요.

      선택이 됐으면 위와 같이 나옵니다.

      칼라 프린터가 아니니까 흑백으로 보이겠죠.

      저는 ePrint free 실행화면을 캡춰했습니다.

      용지는 A4로 사용했구요.

      설정이 끝났으면 오른쪽 상단에 Print 터치하면 프린터가 됩니다.

      오홋...먼가가 프린트되는 느낌이 오네요.^^

      출처 : http://blog.naver.com/PostView.nhn?blogId=mytelelink&logNo=20103125989
      Posted by 오늘마감

      댓글을 달아 주세요