프로그래밍/Objective-C2010. 7. 15. 09:45
* 스크롤 뷰

  - 컨텐츠 사이즈가 뷰 사이즈보다 클 경우 스크롤 기능을 이용해서 보여줄 수 있는 뷰
  - 자체적으로 줌 기능을 가지고 있기 때문에 한번에 보여주는 크기인 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개 메소드 사이에 애니메이션의 효과를 지정하면 된다
Posted by windship