* 스크롤 뷰
- 컨텐츠 사이즈가 뷰 사이즈보다 클 경우 스크롤 기능을 이용해서 보여줄 수 있는 뷰
- 자체적으로 줌 기능을 가지고 있기 때문에 한번에 보여주는 크기인 Frame 사이즈와 전체의 컨텐츠 크기인 ContentsSize 2가지의 사이즈를 설정해야 한다
- 인터페이스 빌더는 기본 뷰 이상의 크기를 편집할 수 없기 때문에 스크롤 뷰는 인터페이스 빌더로 설정하기 어렵다(코딩으로 만든다)
- 항상 setScrollEnabled 속성을 Yes로 주어야만 스크롤이 가능해진다 <-- 주의!
- 이미지의 사이즈는 직접 계산할 필요가 없다. Xcode의 Resources에만 등록해 두면 알아서 크기와 사용 용량을 알아서 구한다
- 예제 1: 스크롤 없음
-(void)loadView
{
UIImage* image = [UIImage imageNamed:@"tri2.jpg"]; // 이미지 파일로 UIImage 객체를 생성
UIImageView * imageView = [[UIImageView alloc]initWithImage:image]; // UIImage 객체를 기반으로
// UIImageView 객체를 생성
// (frame - (0,0,가로크기,세로크기)
[imageView setUserInteractionEnabled:YES]; // ImageView가 사용자의 터치 이벤트를 받을 수 있도록 설정
// (없으면 터치 이벤트 사용 못함) <-- 중요!
[image release]; // UIImage 객체를 release. viewController나 view는 다른 객체
self.view = imageView;
[imageView release];
}
- 예제 2: 스크롤 가능
- (void)loadView
{
UIImage* image = [UIImage imageNamed:@"tri2.jpg"];
UIImageView * imageView = [[UIImageView alloc]initWithImage:image];
[imageView setUserInteractionEnabled:YES];
CGSize imageSize = [image size];
[image release];
CGRect rect;
rect.origin.x = 0;
rect.origin.y = 0;
rect.size.width = 320;
rect.size.height = 480;
UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:rect]; // ScrollView를 한번에 보여주고자
// 하는 크기만큼으로 설정
[scrollView setScrollEnabled:YES]; // 스크롤을 가능하도록 설정
[scrollView setContentSize:imageSize]; // 전체 컨텐츠 크기를 대상 이미지 크기만큼으로 설정
[scrollView addSubview:imageView]; // 스크롤뷰에 출력할 컨텐츠를 설정
[imageView release];
self.view = scrollView; // 현재 뷰는 스크롤 뷰로 설정
[scrollView release];
}
- 줌 기능을 사용하려면 줌의 최대, 최소 사이즈를 추가로 지정해 주어야 한다
- delegate에 메소드를 가지고 있는 객체를 지정해 줘야 하며, UIScrollViewDelegate 프로토콜을 따른다
- 뷰는 가만히 있지만 그 안에 보여지는 컨텐츠가 줌을 수행하는 것
- 예제 3: 줌 기능 추가
~~~ViewController.h 파일
#import <UIKit/UIKit.h>
@interface _715_1ViewController : UIViewController <UIScrollViewDelegate>
{
UIImageView * returnView;
}
@end
~~~ViewController.m 파일 #1
- (void)loadView
{
UIImage* image = [UIImage imageNamed:@"tri2.jpg"];
UIImageView * imageView = [[UIImageView alloc]initWithImage:image];
[imageView setUserInteractionEnabled:YES];
CGSize imageSize = [image size];
[image release];
CGRect rect;
rect.origin.x = 0;
rect.origin.y = 0;
rect.size.width = 320;
rect.size.height = 480;
UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:rect]; // ScrollView를 한번에 보여주고자
// 하는 크기만큼으로 설정
[scrollView setScrollEnabled:YES]; // 스크롤을 가능하도록 설정
[scrollView setContentSize:imageSize]; // 전체 컨텐츠 크기를 대상 이미지 크기만큼으로 설정
[scrollView addSubview:imageView]; // 스크롤뷰에 출력할 컨텐츠를 설정
scrollView.maximumZoomScale = 2.0f;
scrollView.minimumZoomScale = 0.5f;
scrollView.delegate = self;
returnView = [imageView retain];
[imageView release];
self.view = scrollView; // 현재 뷰는 스크롤 뷰로 설정
[scrollView release];
}
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return returnView;
}
~~~ViewController.m 파일 #2
UIImage* image = [UIImage imageNamed:@"tri2.jpg"];
UIImageView * imageView = [[UIImageView alloc]initWithImage:image];
returnView = [imageView retain];
[imageView setUserInteractionEnabled:YES];
CGSize imageSize = [image size];
[image release];
CGRect rect;
rect.origin.x = 0; rect.origin.x = 0;
rect.size.width = 320; rect.size.height = 480;
UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:rect];
[scrollView setScrollEnabled:YES];
[scrollView setContentSize:imageSize];
[scrollView addSubview:imageView];
[scrollView setMaximumZoomScale:2.0];
[scrollView setMinimumZoomScale:0.5f];
[scrollView setDelegate:self];
[imageView release];
self.view = scrollView;
[scrollView release];
-(UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView
{
return returnView;
}
* UIView Animation
- 위치변화, 크기변화, 투명도변화, 회전 등이 가능
- +(void)beginAnimations:(NSString *)animationID context:(void *)context <-- 시작 구문
- +(void)commitAnimations <-- 종료 구문
- 위 2개 메소드 사이에 애니메이션의 효과를 지정하면 된다
'프로그래밍 > Objective-C' 카테고리의 다른 글
#pragma mark로 코드 쉽게 구분하기 (0) | 2010.07.20 |
---|---|
중앙정보학원 아이폰과정 10일차 - 2010년 7월 16일 (0) | 2010.07.16 |
중앙정보학원 아이폰과정 8일차 - 2010년 7월 14일 (0) | 2010.07.14 |
중앙정보학원 아이폰과정 6일차 - 2010년 7월 12일 (0) | 2010.07.12 |
중앙정보학원 아이폰과정 5일차 - 2010년 7월 9일 (0) | 2010.07.09 |