기본적으로 UIView에서는

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

NSLog(@"Began");

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

NSLog(@"Ended");

}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

NSLog(@"Moved");

}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{

NSLog(@"Cancelled");

}


를 이용하여 터치 이벤트를 처리할 수 있습니다.
그러나 UIView에 ScrollView를 올려놓게 되면 터치 이벤트가 ScrollView에서 처리하기 때문에

상위 클래스인 UIView까지 전달되지 못합니다.
따라서 상위 클래스로 터치 이벤트를 넘겨주기 위해터치 이벤트를 상위 클래스로 넘겨주기 위해서
UIScrollView를 상속하여 터치 이벤트 메서드들을 오버라이딩해야 합니다.

1. 우선 우리가 원하는 터치 이벤트와 뷰, 스크롤 뷰가 들어있는 클래스와 XIB파일을 만듭니다.
제가 만든 파일명은 ViewController입니다.
<ViewConroller.h>

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIScrollViewDelegate>{

UIScrollView* scrollView;

}

@property(nonatomic, strong) IBOutlet UIScrollView* scrollView;


@end

#import "ViewController.h"

@end

<ViewConroller.m>

#import "ViewController.h"


@implementation ViewController

@synthesize scrollView;

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.

}


#pragma mark - View lifecycle

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

NSLog(@"Began");

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

NSLog(@"Ended");

}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

NSLog(@"Moved");

}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{

NSLog(@"Cancelled");

}


- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

UIImageView *modelImageView = [[UIImageView alloc]init];

modelImageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"MODEL_List.jpg" ofType:nil]];

modelImageView.frame = CGRectMake(0, 0, 320, 6700);

scrollView.contentSize = CGSizeMake(320, 6700);

modelImageView.userInteractionEnabled = YES;

[scrollView addSubview:modelImageView];

}


- (void)viewDidUnload

{

[super viewDidUnload];

// Release any retained subviews of the main view.

// e.g. self.myOutlet = nil;

}


- (void)viewWillAppear:(BOOL)animated

{

[super viewWillAppear:animated];

}


- (void)viewDidAppear:(BOOL)animated

{

[super viewDidAppear:animated];

}


- (void)viewWillDisappear:(BOOL)animated

{

[super viewWillDisappear:animated];

}


- (void)viewDidDisappear:(BOOL)animated

{

[super viewDidDisappear:animated];

}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

// Return YES for supported orientations

return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

}


@end


2. 그리고 ViewController.xib파일에는 한 개의 스크롤뷰가 들어있는 뷰가 있습니다.
그리고 뷰 안의 스크롤뷰는 ViewController.h에서 IBOutlet으로 선언한 scrollView와 연결해 줍니다.




3. 이제 UIScrollView를 상속받은 클래스를 새로 생성합니다. 이 클래스는 xib파일을 필요로 하지 않으므로 xib파일 생성은 하지 않습니다.
제가 이 클래스에게 원하는 것은 터치 이벤트를 상위로 전달하는 것뿐이므로 불필요한 소스들은 넣지 않았습니다.
제가 만든 클래스의 이름은 ModelScrollViewController입니다.

#import <UIKit/UIKit.h>


@interface ModelScrollViewController : UIScrollView


@end


#import "ModelScrollViewController.h"


@implementation ModelScrollViewController


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

return self;

}


- (void)didReceiveMemoryWarning

{

}


#pragma mark - View lifecycle

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

[self.superview touchesBegan:touches withEvent:event];

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

[self.superview touchesEnded:touches withEvent:event];

}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

[self.superview touchesMoved:touches withEvent:event];

}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{

[self.superview touchesCancelled:touches withEvent:event];

}


- (void)viewDidUnload

{


}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

// Return YES for supported orientations

return (interfaceOrientation == UIInterfaceOrientationPortrait);

}


@end


상위 클래스인 ViewController로 이벤트를 넘겨주기 위해서 를[self.superview touchesBegan:touches withEvent:event]를 사용하였습니다.

4. 이 마지막으로 다시 ViewController.xib파일로 가서 scrollView의 custom class를 변경해 주도록 합니다.

'컴퓨터 > 아이폰' 카테고리의 다른 글

tableview 관련  (0) 2012.11.26
iOS 버전 바꾸기  (0) 2012.11.19
맥os find 숨긴 파일 보이기 감추기  (0) 2012.05.18
THEOS iOS hooking 툴  (0) 2012.05.10
엔터프라이즈 계정 in house 배포 방식..  (0) 2012.02.15
      
Posted by k_ben


터미널에서 아래 명령어를 실행

defaults write com.apple.Finder AppleShowAllFiles YES


실행 후 파인더(Finder) 재실행을 하면


숨김파일이 보인다.
반대로 숨김파일을 다시 안 보려면 아래의 명령어를 실행한 후 파인더(Finder) 재시작

defaults write com.apple.Finder AppleShowAllFiles NO

'컴퓨터 > 아이폰' 카테고리의 다른 글

iOS 버전 바꾸기  (0) 2012.11.19
scrollView에서 터치 이벤트 받기  (0) 2012.10.14
THEOS iOS hooking 툴  (0) 2012.05.10
엔터프라이즈 계정 in house 배포 방식..  (0) 2012.02.15
pc에서 iphone 제어  (0) 2012.01.31
      
Posted by k_ben


1. 다음 정보를 환경 정보 파일에 추가하자.
export THEOS=/opt/theos
당장 작업해야하니 일단 터미널에서 한번 저걸 실행해주면 좋겠지.
(MacPorts 사용 시 /opt 폴더는 root 권한이 필요하므로 다른 곳으로 옮기던가, theos 만 권한 설정을 한다던가 하도록 한다.)

2. THEOS 본체를 받자.
서브버전 이용 시,
svn co http://svn.howett.net/svn/theos/trunk $THEOS
git 이용 시,
git clone git://github.com/DHowett/theos.git $THEOS


git clone git://github.com/rpetrich/theos.git $THEOS

3. ldid를 받자.
curl -s http://dl.dropbox.com/u/3157793/ldid > $THEOS/bin/ldid; chmod +x $THEOS/bin/ldid

4. 설치해둔 iOS SDK 버전을 환경 정보에 추가한다.
3.0이면 안 해도 된다.
SDKVERSION=4.2

5. include를 추가.
https://github.com/rpetrich/iphoneheaders
에서 받아서 $THEOS/include 아래에 옮겨둔다.
아마도,
git clone git://github.com/rpetrich/iphoneheaders.git $THEOS/include
하면 걍 되지 않을까 싶은데 안 해봐서 모르겠네. ㅋ


cd $THEOS
./git-submodule-recur.sh init

6. include 중 빠진 것을 채워넣자.
include 아래에 폴더 하나씩 살펴보면, 간혹가다가 readme 파일들이 보일텐데,
저작권 문제로 배포를 못 하는 파일들을, 구하는 방법 및 패치 내용 등등을 적어둔 것이다.
보고 그대로 넣으면 된다.




프로젝트를 만드는 방법:


터미널에서, 만들 위치로 이동 후
$THEOS/bin/nic.pl

를 실행하면 마법사가 나타난다.
알맞게 선택하면 알아서 만들어 주니까 잘 쓰도록 하자.

'컴퓨터 > 아이폰' 카테고리의 다른 글

scrollView에서 터치 이벤트 받기  (0) 2012.10.14
맥os find 숨긴 파일 보이기 감추기  (0) 2012.05.18
엔터프라이즈 계정 in house 배포 방식..  (0) 2012.02.15
pc에서 iphone 제어  (0) 2012.01.31
MDM에 관한거...  (0) 2012.01.20
      
Posted by k_ben