오늘은 아래와 같은 화면을 XCODE로 만들어 보도록 하겠습니다.
오늘은 탭바는 만들지 않겠습니다.
탭바를 만들었다는 전제 조건하에 위화면을 구성해 보겠습니다.
File > New Project 메뉴를 클릭하면 아래와 같은 화면이 나타 납니다. Window-based Application 타입을 선택한 후 오른쪽 하단의 Choose를 클릭하여 다음 화면으로 넘어 갑니다.
생성할 프로젝트명은 원하시는걸로 입력하세요(ex, bgex)
프로젝트 이름까지 입력하시고 나면 아래와 같은 화면을 접하실 수 있습니다.
(다른 분들은 저와 살짝 다르게 보일 수 있습니다. 단순한 화면 구성의 차이이니 이 프로젝트를 하시는데 큰 문제는 없습니다.)
여기까지는 기본 프로젝트를 만드는 단계이고 이제 이 프로젝트에서 쓰일 이미지 파일들을 Resources 폴더로 넣도록 하겠습니다.
오른쪽의 Finder 에서 원하는 이미지를 선택 한 후 Resources 폴더로 드래그 앤 드롭 합니다. 그러면 창이 하나 뜨는데 copy item into ~ 이부분을 체크 하시고 Add 버튼을 눌러 주세요.
이제 Resources 폴더에 있는 MainWindow.xib 파일을 더블클릭하여 인터페이스 빌더를 열고 Library 창에서 Image View를 선택한 후 Window 창에 끓어다 놓습니다. 가운데 있는 창에서 자모양의 아이콘을 선택하고 가로와 세로의 길이를 위와 같이 지정해 줍니다.
왼쪽 Window 창에서 UIImageView를 선택하시고 오른쪽 상단탭중 젤 왼쪽에 있는 탭을 선택하신 후 image의 오른쪽에 있는 화살표를 눌러 좀전에 넣어둔 이미지 중 menu_bg.png 파일을 선택 합니다.
Background 는 선택을 하신 후 Opacity를 0으로 처리 하시면 됩니다. 지금까지 잘 따라하셨다면 아래와 같은 화면이 나타나고 이제 그 위에 버튼 이미지들을 올려 놓도록 하겠습니다.
Library 창에서 Round Rect Button을 Window 창으로 끌어 놓고 가운데 있는 인스펙터 창에서 Background의 이미지를 menu1.jpg로 선택을 해 줍니다.
위와 같은 방식으로 나머지 두개도 처리를 합니다.
이제 마지막 남은 전체에 백그라운드를 지정하는 화면 입니다. bgexAppdelegate.m 파일을 여신 후 위와 같이 입력을 하시면 됩니다.
소스코드 :
window.backgrondColor = [[UIColor alloc] initWidthPatternImage:[UIImage imageNamed:@”bg.jpg”]];
이제 완료 되었으니 한번 실행해 보시죠. ㅋㅋ 짜잔~!!!
'아이폰 개발 이야기' 카테고리의 다른 글
| 아이폰 개발, 배경이미지를 만들어봅시다! (0) | 2010/08/10 |
|---|---|
| 아이폰 개발, 좌표값과 주소 구하기 (7) | 2010/06/29 |
| 아이폰 개발시 유용한 탭바 커스텀(Custom Tab Bar) 구현하기 (12) | 2010/06/25 |
| [아이폰 컨트롤러 예제] ① 테이블뷰 (0) | 2010/05/27 |
| 아이폰 개발자 등록 방법 A TO Z (22) | 2010/05/24 |
| 아이폰 개발 문자열(NSString) 다루기 예제 (0) | 2010/05/10 |
아이폰 어플중에서 지도에 자기 좌표가 찍히고 주소가 나오는 어플들을 많이들 보셨을 텐데요.
오늘은 좌표값과 주소 구하는 방법에 대해서 알아보겠습니다.
이 기능은 참 많은 어플들을 통해서 활용이 가능할 것 같습니다.
우선 작업목표를 정해보았습니다.
1. 새 프로젝트 (Window-based Application)를 생성한다.
2. 새 프로젝트에 뷰를 하나 추가한다.
3. 추가한 뷰에 검색된 결과를 보여줄 화면(Label,Button등등)을 구성한다.
3. 현재 좌표값을 구한다.
4. 구해진 좌표값을 화면에 뿌린다.
5. 구해진 좌표값에 해당하는 주소를 구글맵에서 받아온다.
6. 받아온 결과를 화면에 뿌려준다.
막상 써 놓으니 음... 생각보단 간단하네요~!!
자~~ 이제 목표는 정해졌으니 하나씩 해보면 됩니다.ㅋ
이제 작업목표에서 정한 순서로 진행과정을 살펴보겠습니다..
시작해 볼까요~
XCode에서 File->New Project->Window-based Application을 클릭하세요.
(아시는 분들도 많겠지만 혹시 모르는 분도 있을까 해서 아래 이미지 참조)
2. 새 프로젝트를 윈도우 베이스로 만들었지만 뭔가 보여줄 화면이 필요합니다.
화면용 파일을 하나 프로젝트에 추가합니다.
XCode화면의 Groups&Files 영역에서 마우스 오른쪽 클릭해서 Add->New File을 합니다.
3. 이제 화면도 만들었습니다.
Command+R 키로 그냥 한번 실행해봅니다. 아무것도 없습니다..
화면에 뭔가 만들어주어야 합니다. 다른 것을 사용해도 되겠지만 이번 작업에서는 단순하게 Label로 모두 처리하도록 합니다.
아래화면 참고해서 같이 만들어보죠.
참고로 화면에 구성된 Label들은 소스파일의 IBOutlet로 선언된 변수들과 연결해주어야 합니다.
4. Label과 아웃렛과의 연결 하셨다면 이제 좌표값을 구해보겠습니다.
좌표값을 구하기 위해서는 CoreLocation.framework을 현재 프로젝트에 추가해주어야 합니다.
추가했나요? 이젠 좌표구하는 부분 소스를 보겠습니다.
/*
viewDidLoad 이벤트에 CLLocationManager를 생성해서 실행줍니다.
그러면 #pragma mark - 이하 부분이 자동적으로 실행됩니다.
핵심 소스가 여기입니다.
*/
- (void)viewDidLoad {
self.locationManager = [[CLLocationManager alloc] init];
[locationManager startUpdatingLocation];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
}
#pragma mark -
#pragma mark CLLocationManagerDelegate Methods
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
if (startingPoint == nil)
self.startingPoint = newLocation;
NSString *latitudeString = [[NSString alloc] initWithFormat:@"위도 : %g°", newLocation.coordinate.latitude];
latitudeLabel.text = latitudeString;
[latitudeString release];
NSString *longitudeString = [[NSString alloc] initWithFormat:@"경도 : %g°", newLocation.coordinate.longitude];
longitudeLabel.text = longitudeString;
[longitudeString release];
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
NSString *errorType = (error.code == kCLErrorDenied) ? @"Access Denied" : @"Unknown Error";
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error gettingg location from Core Location" message:errorType delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil];
[alert show];
[alert release];
}
==============================================================================================
5. 좌표값을 받아서 구글맵에서 주소를 조회하는 부분을 보겠습니다.
1) 구글맵에 주소 조회 쿼리를 보내서 결과(XML)를 받아오는 기능을 구현합니다.
2) 받아온 결과(XML)을 파싱하는 기능을 구현합니다.
위에 1), 2)는 유기적으로 함께 구동됩니다.
==================구글맵에 주소 조회 쿼리 보내기=========================
-(IBAction)loadXMLData{
self.xmlUrl = @"http://maps.google.com/maps/api/geocode/xml?latlng=37.630478,127.090199&language=kr&sensor=true";
xmlConnection = [[NSURLConnection alloc]
initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:xmlUrl]]
delegate:self];
if (xmlConnection == nil)
NSLog(@"Connect error");
else
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
xmlParseData = [[NSMutableArray alloc] init];
xmlValue = [[NSMutableString alloc] init];
currectItem = [[NSMutableDictionary alloc] init];
receiveData = [[NSMutableData alloc] init];
}
#pragma mark URLConnection delegate methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"Receive: %@, %@, %d",
[response URL],
[response MIMEType],
[response expectedContentLength]);
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"%@", [error localizedDescription]);
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
//NSString *str = [[NSString alloc] initWithData:data encoding:0x80000000 + kCFStringEncodingDOSKorean];
//NSData *data1 = [str dataUsingEncoding:NSUTF8StringEncoding];
[receiveData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
//NSString *str = [[NSString alloc] initWithData:receiveData encoding:0x80000000 + kCFStringEncodingDOSKorean];
//NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
//NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:receiveData];
[parser setDelegate:self];
[parser parse];
[parser release];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
[xmlConnection release];
[receiveData release];
}
================================조회 결과 XML을 파싱하여 화면에 보여주기================================
#pragma mark XMLParse delegate methods
//#pragma mark NSXMLParser delegate methods
- (void)parserDidEndDocument:(NSXMLParser *)parser {
self.clickBtn;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"address_component"])
elementType = etItem;
[xmlValue setString:@""];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if (elementType != etItem)
return;
if ([elementName isEqualToString:@"long_name"]) {
[currectItem setValue:[NSString stringWithString:xmlValue] forKey:elementName];
} else if ([elementName isEqualToString:@"short_name"]) {
[currectItem setValue:[NSString stringWithString:xmlValue] forKey:elementName];
} else if ([elementName isEqualToString:@"address_component"]) {
[xmlParseData addObject:[NSDictionary dictionaryWithDictionary:currectItem]];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (elementType == etItem) {
[xmlValue appendString:string];
}
}
좀 부족했지만 위 설명을 잘 수행한다면 다음과 같은 화면이 나오게 됩니다...(제가 사는곳입니다. ㅎㅎㅎ)
부족한 부분은 첨부된 소스 보면 이해가 될겁니다. 파일첨부합니다~!! 화이팅하세요~
'아이폰 개발 이야기' 카테고리의 다른 글
| 아이폰 개발, 배경이미지를 만들어봅시다! (0) | 2010/08/10 |
|---|---|
| 아이폰 개발, 좌표값과 주소 구하기 (7) | 2010/06/29 |
| 아이폰 개발시 유용한 탭바 커스텀(Custom Tab Bar) 구현하기 (12) | 2010/06/25 |
| [아이폰 컨트롤러 예제] ① 테이블뷰 (0) | 2010/05/27 |
| 아이폰 개발자 등록 방법 A TO Z (22) | 2010/05/24 |
| 아이폰 개발 문자열(NSString) 다루기 예제 (0) | 2010/05/10 |
안녕하세요. 이제부터 아이폰 어플에 쓰이는 컨트롤러들을 한개씩 간단한 예제와 함께 설명하려 합니다.
그 첫번째 테이블 뷰 입니다.
아마 컨트롤러 중에서 방대하게 쓰이는 게 이 테이블 뷰가 아닐까 생각되네요 ^^
테이블뷰 사용 예제는 4가지로 나눠서 포스팅할게요
2. 네비컨트롤러를 이용한 테이블뷰 예제
3. XML를 이용한 테이블 뷰 예제
4. 테이블 뷰에 셀 디자인 예제
오늘은 그 첫번째 간단한 테이블 뷰 예제 입니다.
새 프로젝트 선택하고 TableTest 라는 이름으로 프로젝트 생성해주세요. 프로젝트 생성해 주실때는 네모칸 친 view_based Application 으로 선택해주세요.
이제 테이블 뷰를 IB에서 집어넣을게요 TableTestViewController.xlb 를 열어주세요.
그림처럼 테이블 뷰를 View 창에 끌어다 넣으세요~ 그럼 화면과 같이 꽉 차게 들어가면 됩니다.
집어넣은 테이블 뷰 선택한 상태에서 네모칸 친곳을 보면 dataSource 와 delegate 가 보일꺼예요
그걸 File;s Owner로 연결해 주세요. 이렇게 함으로 어플이 실행될때 이 테이블 뷰 컨트롤러를 델리게이트로 인식해서 AppDelegate에서 별다른 코드를 넣지 않아도 테이블 뷰를 먼저 띄우게 됩니다.
이제 소스 작업을 하겠습니다.
TableTestViewController.h 를 열어주시고 아래와 같이 코드를 써주세요
#import <UIKit/UIKit.h>
@interface TableTestViewController : UIViewController <UITableViewDelegate , UITableViewDataSource>{
NSArray *listData; //테이블뷰에 들어갈 테이타를 저장 할 배열 변수 선언
}
@property (nonatomic, retain) NSArray *listData;
@end
TableTestViewController.m 를 열어주시고 아래와 같이 코드를 써주세요
#import "TableTestViewController.h"
@implementation TableTestViewController
@synthesize listData; //앞에서 선언한거 synthesize 해주고요
//처음 동작할때 로드되는 부분입니다. 저희는 배열에 데이타를 넣는 작업을 했습니다.
- (void)viewDidLoad {
NSArray *array = [[NSArray alloc] initWithObjects:@"AAAA",@"BBBBB",@"CCCCCC",@"DDDDDD",nil];
self.listData = array;
[array release]; //선언된 변수 초기화
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
self.listData = nil;
}
//여기가 본격적인 테이블뷰 코딩 작업입니다.
#pragma mark Table view methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1; //테이블 그룹갯수를 리턴합니다. 저희는 테이블이 따로 그룹이 필요없고 한개만 될 것이기 때문에 1 적어주시고
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.listData count]; //데이타 갯수를 리턴합니다. 배열의 갯수를 리턴합니다.
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
// 셀 스타일을 정하는 구간입니다. 빨간색 부분을 UITableViewCellStyleValue1 / UITableViewCellStyleValue2 / UITableViewCellStyleSubtitle / UITableViewCellStyleDefault 이렇게 4가지 방식으로 바까보세요 셀 형식이 바뀌는걸 보실수 있으실 겁니다
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
NSUInteger row = [indexPath row];
cell.textLabel.text = [listData objectAtIndex:row]; //로우 indexPath와 배열 index와 매칭시켜서 값을 집어넣어요
cell.detailTextLabel.text = @"서브텍스트"; //서브텍스트라벨에 글자를 집어넣습니다.
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; //테이블 뷰 옆에 [>] 이런 화살표 이미지가 이 옵션으로 생깁니다. 필요 없으신 분은 삭제 하셔도 무방하세요~
return cell;
}
- (void)dealloc {
[listData release];
[super dealloc];
}
@end
자 그럼 결과를 실행해볼게요 위에 코드 설명에 보면 빨간색으로 표시된 UITableViewCellStyleSubtitle 부분 보이죠
이부분이 셀 스타일을 지정해 주는 것으로
UITableViewCellStyleValue1 / UITableViewCellStyleValue2 / UITableViewCellStyleSubtitle / UITableViewCellStyleDefault
이 4개중 여러개로 바꿔보시면서 컴파일 해보세요
아래는 스타일에 따른 컴파일 화면입니다.
① UITableViewCellStyleDefault 일 경우
② UITableViewCellStyleValue1 일 경우
③ UITableViewCellStyleValue2 일 경우
'아이폰 개발 이야기' 카테고리의 다른 글
| 아이폰 개발, 좌표값과 주소 구하기 (7) | 2010/06/29 |
|---|---|
| 아이폰 개발시 유용한 탭바 커스텀(Custom Tab Bar) 구현하기 (12) | 2010/06/25 |
| [아이폰 컨트롤러 예제] ① 테이블뷰 (0) | 2010/05/27 |
| 아이폰 개발자 등록 방법 A TO Z (22) | 2010/05/24 |
| 아이폰 개발 문자열(NSString) 다루기 예제 (0) | 2010/05/10 |
| 아이폰 개발하려면 일단 요것부터-2편 (Hellow World) (2) | 2010/05/03 |
Objective-C 에서는 [메시지 표현식] 이란것을 씁니다.
이게 머냐하면 아이폰 소스 같은거 보면 다른 프로그래밍 할때 많이 보였던 함수 대신 [myInfo name] 이라든지 [myInfo name:@"이름" addr:@"주소"] 이런 형식을 많이 보셨을꺼예요
이게 바로 [ 메시지 표현식 ] 입니다.
[객체 메시지] <- 이런 형식으로 쓰이며 인자가 있을경우 인자값을 넣어주기도 합니다.
메시지를 받은 객체가 결과를 처리하고 결과가 있다면 리턴값으로 반환 없다면 void 를 반환한다고 하네요 .
라인이 길어지긴하지만 어떤 인자를 필요로 하고 참고하는지 직접적으로 표현해 주기 때문에 이런 표현식을 쓴다고 하네요
그럼 클래스를 구현해 보도록 하겠습니다.
-클래스 생성 방법
[클래스명 alloc]
-클래스 초기화 (생성한 뒤 사용하기 위해서는 초기화가 되어야 합니다.)
[클래스명 init]
-> 이 2개를 대부분 같이 쓰죠 한번에 샤삭 ! [[클래스명 alloc]init]
-클래스 해제 ( 다 썼음 메모리에서 지워줘야겠죠 )
[클래스명 release]
클래스를 정의할려면 인터페이스 부분과 구현부분으로 분리해서 기술해야 합니다.
인터페이스부분 -> 나 이런거 이런거 쓸꺼다 선포하는 곳이랄까요..
구현부분 -> 실제 돌아가는 소스
*변수명은 첫글자가 소문자 / 클래스 명은 첫글자가 대문자!! 잊지 마시고요
//인터페이스부분 작성 형식
@interface 클래스명: 슈퍼 클래스명{
메소스 선언;
@end
------------------------------------
------------------------------------
//구현부분 작성 형식
@implementation 클래스명
메소드 정의
@end
------------------------------------
사용한 예는 http://www.web2log.com/entry/아이폰-어플-개발-초급-Hello-World-프로그래밍을-해보자-1 에서 소스 코드를 보시면 아 이런식으로 사용하는구나 아실거에요 ~
'Objective-C' 카테고리의 다른 글
| [Objective-C의 객체 상속] (1) | 2010/05/28 |
|---|---|
| Objective-C 에서 클래스 구현 방법 (0) | 2010/05/24 |
오늘의 포스팅은 문자열(NSString) 다루기 예제입니다.
코코아에서는 문자열을 선언할 시 NSString 클래스를 사용합니다.
기본적으로 문자열을 대입 할 시에는 @ 를 꼭 붙여준다음 문자를 써줘야 합니다.
아래 예제를 보시면 이해가 가실거예요
// 빈 문자열 생성하기
NSString *str1 = [NSString new];
//일반적인 문자열 대입 - 문자열 상수
str1 = @"web2log.com";
//포멧 문자열(stringWithFormat) - 변수 대입방식
NSString *str2 = [NSString stringWithFormat:@"Hi, %@",str1];
//포멧 문자열(stringWithFormat) - 숫자 대입방식
NSString *str3 = [NSString stringWithFormat:@"Integer, %d",123456];
//포멧 문자열(stringWithFormat) - 문자열 대입방식
NSString *str4 = [NSString stringWithFormat:@"stringWithFormat, %s","web2log.com"];
//Object-C형식 문자열
NSString *str5 = [NSString stringWithString:@"web2log.com"];
//C형식 문자열
NSString *str6 = [NSString stringWithCString:"web2log.com"];
//문자열 Append (추가)
NSString *str7 = [str6 stringByAppendingString:@":web2log.com"];
//문자열 길이 구하기
int len = [str7 length];
//String형을 int형으로 형변환하기
int vInt = [@"1234" intValue];
//String형을 float형으로 형변환하기
float vFloat = [@"1234.56" floatValue];
//메모리 할당한 문자열 변수 제거
[str1 release];
그리고 위에 예제코드를 바탕으로 간단한 샘플앱을 만들었는데요,
파일 첨부합니당~!
샘플 앱의 결과 화면을 볼까요
'아이폰 개발 이야기' 카테고리의 다른 글
| [아이폰 컨트롤러 예제] ① 테이블뷰 (0) | 2010/05/27 |
|---|---|
| 아이폰 개발자 등록 방법 A TO Z (22) | 2010/05/24 |
| 아이폰 개발 문자열(NSString) 다루기 예제 (0) | 2010/05/10 |
| 아이폰 개발하려면 일단 요것부터-2편 (Hellow World) (2) | 2010/05/03 |
| 아이폰 하단 navigationController의 Toolbar에 이미지 버튼 넣는 방법 (0) | 2010/04/27 |
| 아이폰 개발하려면 일단 요것부터-1편 (13) | 2010/04/27 |
pt :points(포인트) - 1포인트는 0.72인치
px :pixels(픽셀) - 화면 해상도에 대한 상대크기
% : 퍼센티지 - 지정되거나 상속받은 (또는 상위 엘리먼트)에 대한 백분율 상대 크기
말로하면 복잡하죠?
아래 표를보면 한눈에 쫙~들어올겁니다.
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.375em | 37.5% | 5pt |
| 7px | 0.438em | 43.8% | 5pt |
| 8px | 0.5em | 50% | 6pt |
| 9px | 0.563em | 56.3% | 7pt |
| 10px | 0.625em | 62.5% | 8pt |
| 11px | 0.688em | 68.8% | 8pt |
| 12px | 0.75em | 75% | 9pt |
| 13px | 0.813em | 81.3% | 10pt |
| 14px | 0.875em | 87.5% | 11pt |
| 15px | 0.938em | 93.8% | 11pt |
| 16px | 1em | 100% | 12pt |
| 17px | 1.063em | 106.3% | 13pt |
| 18px | 1.125em | 112.5% | 14pt |
| 19px | 1.188em | 118.8% | 14pt |
| 20px | 1.25em | 125% | 15pt |
| 21px | 1.313em | 131.3% | 16pt |
| 22px | 1.375em | 137.5% | 17pt |
| 23px | 1.438em | 143.8% | 17pt |
| 24px | 1.5em | 150% | 18pt |
1em은 16px 이고, 우리가 많이 쓰는 12px은 0.75em 이되죠.
부모 요소에 적용한 스타일이 자식 요소에 계속되는 것을 상속(inherit)라고 합니다. 상속된 값이 "%"나 "em" 등의 상대단위인 때는 일반적으로 부모 요소의 값에 자식 요소의 값을 더한 값이 적용됩니다.
body { font-size:62.5%; color:green;}
div { font-size:2em; }
p { font-size:1.5em; border : 1px solid red ; padding: 1em;}
</style>
<body>
<p>body의 62.5%의 폰트사이에서 p의 1.5em만큼 커진 폰트 사이즈입니다. </p>
<div>
<p>div의 2em사이즈를 한번 더 상속받은 이곳은 폰트가 위의 p태그보다 큽니다.</p>
</div>
</body>
em사이즈를 사용할땐 상속받는 값을 생각하며 계산을 해야해서 쬐끔 복잡하다는 느낌이 들기도 합니다.
다음은 폰트 크기 계산을 도와주는 웹 사이트에요.
- em 단위 계산기: http://riddle.pl/emacalc
'웹표준 개발' 카테고리의 다른 글
| CSS 선택자(selector)에 대해서 정리해봅니다. 2 (0) | 2010/05/31 |
|---|---|
| CSS 선택자(selector)에 대해서 정리해봅니다. 1 (2) | 2010/05/20 |
| [웹표준 코딩]CSS 폰트 단위를 알아봅시다 (2) | 2010/05/06 |
| 웹페이지에 옷을 입히는 스타일시트 연결 (1) | 2010/04/26 |
| html과 xhtml의 차이점 (0) | 2010/04/19 |
| DTD선언이란? (0) | 2010/04/12 |
아이폰의 navigationController 의 하단 Toolbar에 이미지 버튼을 넣는 방법입니다.
먼저 팁 전체 소스입니다.
함수 예제 소스를 먼저 보시고 간단히 설명을 하도록 하겠습니다.
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
UIToolbar *toolbar = [[UIToolbar alloc] init];
toolbar.barStyle = UIBarStyleBlackTranslucent; //UIBarStyleBlackOpaque; //UIBarStyleBlackTranslucent;// UIBarStyleDefault;
[toolbar sizeToFit];
CGFloat toolbarHeight = [toolbar frame].size.height;
CGRect rootViewBounds = self.parentViewController.view.bounds;
CGFloat rootViewHeight = CGRectGetHeight(rootViewBounds);
CGFloat rootViewWidth = CGRectGetWidth(rootViewBounds);
CGRect rectArea = CGRectMake(0, rootViewHeight - toolbarHeight, rootViewWidth, toolbarHeight);
[toolbar setFrame:rectArea];
toolbar.tintColor = [UIColor whiteColor];
toolbar.translucent = YES;
UIImage *buttonImage = [UIImage imageNamed:@"checkmarkControllerIcon.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:buttonImage forState:UIControlStateNormal];
[button addTarget:self action:@selector(info_clicked:) forControlEvents:UIControlEventTouchUpInside];
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
UIBarButtonItem *infoButton = [[UIBarButtonItem alloc] initWithCustomView:button];
UIBarButtonItem *flexibleSpace1 = [UIBarButtonItem alloc];
flexibleSpace1 = [flexibleSpace1 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *flexibleSpace2 = [UIBarButtonItem alloc];
flexibleSpace2 = [flexibleSpace2 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[toolbar setItems:[NSArray arrayWithObjects:flexibleSpace1,infoButton,flexibleSpace2,nil]];
toolbar.hidden = NO;
[self.navigationController.view addSubview:toolbar];
[infoButton release];
[flexibleSpace1 release];
[flexibleSpace2 release];
[toolbar release];
}
- (void) info_clicked:(id)sender{
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"sss"
message:@"버튼을 클릭하셨네요..."
delegate:self
cancelButtonTitle:@"닫기"
otherButtonTitles:nil];
[alert show];
[alert release];
}
============================= 팁 전체소스=================================
위 소스에 대한 간단한 설명 추가합니다.
============================= 소스 설명===================================
//viewWillAppear 이벤트입니다.
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated]; //==> 요건 이벤트 발생후 기본적으로 처리되는 부분입니다.
// Navigationbar의 하단에 들어갈 Toobar를 생성합니다.
UIToolbar *toolbar = [[UIToolbar alloc] init];
toolbar.barStyle = UIBarStyleBlackTranslucent; //UIBarStyleBlackOpaque; //UIBarStyleBlackTranslucent;// UIBarStyleDefault;
[toolbar sizeToFit];
//생성될 Toolbar의 레이아웃을 설정합니다.
CGFloat toolbarHeight = [toolbar frame].size.height;
CGRect rootViewBounds = self.parentViewController.view.bounds;
CGFloat rootViewHeight = CGRectGetHeight(rootViewBounds);
CGFloat rootViewWidth = CGRectGetWidth(rootViewBounds);
CGRect rectArea = CGRectMake(0, rootViewHeight - toolbarHeight, rootViewWidth, toolbarHeight);
[toolbar setFrame:rectArea];
//Toolbar의 색상을 설정합니다.
toolbar.tintColor = [UIColor whiteColor];
toolbar.translucent = YES;
//Toolbar 를 생성하였으니 버튼을 넣어야 하는데요. 그 버튼을 만들기전에 버튼에 올라갈 이미지버튼을 먼저 만들어야 합니다.
// 간단히 순서를 알아보면
//1. 이미지를 생성한다
//2. 버튼을 생성한다.
//3. 버튼에 이미지를 올린다.
//4. 생성한 버튼을 Toolbar에 올린다.
// 이런 순서입니다.
UIImage *buttonImage = [UIImage imageNamed:@"checkmarkControllerIcon.png"]; //=>이미지 생성
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; //=>버튼 생성
[button setImage:buttonImage forState:UIControlStateNormal];
//툴바용 버튼을 생성하고 클릭했을때 실행될 Action을 할당해줍니다. Action에 대한 구현은 아래쪽에 별도로 구현되어있습니다.
[button addTarget:self action:@selector(info_clicked:) forControlEvents:UIControlEventTouchUpInside];
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
UIBarButtonItem *infoButton = [[UIBarButtonItem alloc] initWithCustomView:button]; //Toolbar버튼 생성
//요기 부분의 툴바버튼의 경우는 위에서 만든 툴바버튼을 중앙에 오게 하기 위해 만들어지는 버튼입니다.
//[infoButton]버튼의 양옆으로 하나씩 버튼을 만들어서 놓으면 [infoButton]버튼이 중앙에 오게 됩니다.
UIBarButtonItem *flexibleSpace1 = [UIBarButtonItem alloc];
flexibleSpace1 = [flexibleSpace1 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *flexibleSpace2 = [UIBarButtonItem alloc];
flexibleSpace2 = [flexibleSpace2 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
//자 버튼을 모두 만들었으니 Toolbar에 버튼을 올립니다.
[toolbar setItems:[NSArray arrayWithObjects:flexibleSpace1,infoButton,flexibleSpace2,nil]];
toolbar.hidden = NO; //=>요건 툴바가 숨겨질건지 보일건지 설정한는 것입니다.
// 마지막으로 Toolbar에 버튼도 올렸으니 NavigationController에 Toolbar를 올려줍니다..
[self.navigationController.view addSubview:toolbar];
// 모든 일은 마무리 했습니다..
// 이제 메모리에 할당되었던 것들은 모두 지워줍니다..
[infoButton release];
[flexibleSpace1 release];
[flexibleSpace2 release];
[toolbar release];
}
// 요 Action은 위의 Toolbar버튼에 연결되는 이벤트입니다..
- (void) info_clicked:(id)sender{
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"sss"
message:@"버튼을 클릭하셨네요..."
delegate:self
cancelButtonTitle:@"닫기"
otherButtonTitles:nil];
[alert show];
[alert release];
}
============================= 소스 설명 ==================================
처음 개발을 시작할 때 찾기 어려운 정보라 힘들었던 부분이었습니다.
도움이 되시길 바랍니다. ^^*
'아이폰 개발 이야기' 카테고리의 다른 글
| 아이폰 개발 문자열(NSString) 다루기 예제 (0) | 2010/05/10 |
|---|---|
| 아이폰 개발하려면 일단 요것부터-2편 (Hellow World) (2) | 2010/05/03 |
| 아이폰 하단 navigationController의 Toolbar에 이미지 버튼 넣는 방법 (0) | 2010/04/27 |
| 아이폰 개발하려면 일단 요것부터-1편 (13) | 2010/04/27 |
| 아이폰 Alert함수 사용법 (0) | 2010/04/22 |
| PHP와 스마트폰의 연동에 있어 XML파싱 (1) | 2010/04/16 |
아이폰 개발과 관련해서 조금 더 기본적인 포스팅이 필요하다는 생각에 아주아주 기초부터 이야기 해보려고 합니다. 걸음마 부터 이야기니까요 이미 떼신 분들은 필요가 없겠습니다. 그럼 시작할께요.
1. 우선 맥북 이 필요하겠죠?
- 아이폰 어플은 맥 프로그래밍을 기본으로 이뤄지기 때문에 맥북에서만 개발을 진행 할 수 있습니다.
편법으로 [해킨토시] 라고 해서 윈도우 기반에서 맥 OS를 돌릴 수 있는 방법으로 개발 하시는 분도 계시기는 하지만 현저히 차이나는 속도와 속터짐으로 결국 맥북을 사신다는 후일담을 들을 수 있습니다. ㅠㅠ
2. 맥 OS를 10.6.2 이상으로 업그레이드 시켜주셔야 합니다
- 업그레이드는 아래 스샷을 보고 설명하자면... 그냥 누르면 됩니다.
3. 애플 개발자 센터에서 SDK를 다운 받아주세요 ( http://developer.apple.com )
- 어플을 등록 하기 위해서는 개발자 라이센스를 사야하지만 일단 개발만을 위해서 SDK를 다운받을 거라면 애플 아이디 만으로 다운이 가능합니다 ^^ 다운받는 곳은 스샷을 확인해 주세요.
4. 다운 받으셨으니 설치 ㄱㄱㄱ
- 설치 하실 때 구성요소에서 SDK 체크 하시고 넘어가주세요~
5. 이제 XCODE 를 작동해 보아요
- XCODE 는 아이폰/맥용 어플리케이션을 만드는 프로그래밍 툴이랍니다. 근데 이놈이 어디에 설치 되어 있는지 모르시겠다고요
맥 OS 상단의 파일 > 파일 열기
- 자신의 하드 디스크 선택 > Developer > Applications > Xcode
☞ 항상 위에 경로로 통해 가는 것도 좋지만 Xcode 아이콘을 드래크해서 Dock에 올려놓으면 편하게 갈수 있겠죠~ *^^* 올려놓으면 저런 망치모양의 아이콘이 생성됩니다.
이제 아이폰 개발하기 위한 준비 과정을 마쳤습니다.
이제 개발만 하면 되죠!!!!! 언제 하지 ㅠ_ ㅜ
다음 번에는 Xcode 작동 맛보기 예로 아주 간단히 프로그래밍의 친구 Hello world 를 찍어보도록할게요 *^^*
'아이폰 개발 이야기' 카테고리의 다른 글
| 아이폰 개발하려면 일단 요것부터-2편 (Hellow World) (2) | 2010/05/03 |
|---|---|
| 아이폰 하단 navigationController의 Toolbar에 이미지 버튼 넣는 방법 (0) | 2010/04/27 |
| 아이폰 개발하려면 일단 요것부터-1편 (13) | 2010/04/27 |
| 아이폰 Alert함수 사용법 (0) | 2010/04/22 |
| PHP와 스마트폰의 연동에 있어 XML파싱 (1) | 2010/04/16 |
| iphone 기획 balsamiq으로 쉽고 빠르게.. (0) | 2010/04/13 |
아이폰어플 개발에서 흔히 사용되는 alert 함수 사용법입니다.
일반 응용프로그램이나 웹어플에서는 아주 간단히 사용하는 alert기능을 iphone에서는 꽤나 복잡하게 사용하는 듯합니다.
일단 아래 함수 예제 소스를 먼저 보시고 간단히 설명을 하도록 하겠습니다.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"메세지 타이틀"
message:@"메세지 내용"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:nil];
[alert show];
[alert release];
===================================================================
위에 소스에 대해 간단히 설명을 붙여보겠습니다.
=============================== 예제 설명 ==========================
UIAlertView *alert = [[UIAlertView alloc] => alert변수 선언과 메모리 할당 (alloc)
initWithTitle:@"메세지 타이틀" => 메모리 할당후 alert창의 타이틀 세팅
message:@"메세지 내용" => alert창의 메세지 내용 세팅
delegate:self => 딜리게이트 할당 (alert창이 뜨게 해주는 부모창 정도로 생각하면 됩니다.)
cancelButtonTitle:@"Cancel" => 취소버튼 타이틀
otherButtonTitles:nil]; =>기타 다른 버튼의 타이틀
===================================================================
요기까지가 alert창을 생성한것입니다. 생성만 했을 뿐이라 실제로 보여지는 것은 아니지요..^^
[alert show]; => 위에서 생성한 alert를 실제로 나타나게 하는 메소드입니다.
[alert release]; => 생성한 메소드를 보여주었으니 메모리에서 지워버려야 합니다.
===================================================================
Iphone에서 자주 사용되고 어렵지 않게 쓰는 함수를 장황하게 설명했습니다.
하지만 이런 간단한 함수의 구조를 잘 파악해두면 다른 함수나 객체를 사용할때 코드의 이해력을 높을 수 있으리라 생각됩니다.
'아이폰 개발 이야기' 카테고리의 다른 글
| 아이폰 개발하려면 일단 요것부터-2편 (Hellow World) (2) | 2010/05/03 |
|---|---|
| 아이폰 하단 navigationController의 Toolbar에 이미지 버튼 넣는 방법 (0) | 2010/04/27 |
| 아이폰 개발하려면 일단 요것부터-1편 (13) | 2010/04/27 |
| 아이폰 Alert함수 사용법 (0) | 2010/04/22 |
| PHP와 스마트폰의 연동에 있어 XML파싱 (1) | 2010/04/16 |
| iphone 기획 balsamiq으로 쉽고 빠르게.. (0) | 2010/04/13 |
|
Tracked from 자바,아이폰 공부하자~!! | 2010/08/25 10:24 | DEL
ㄹㄹ |




FindArea.zip