2010-01-01 5 views
0

저는 아주 간단한 앱을 가지고 있으며 처음에는 막혔습니다. 여기에 코드를 게시하겠습니다.touchesBegan 안에 UIImageView 속성이 있습니다.

TapStackView.h

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 

@interface TapStackView : UIView 
{ 
    //Layers. 
    UIImageView *backgroundImageView; 
    UIImageView *powerOn; 
} 
@property (nonatomic, retain) UIImageView *backgroundImageView; 
@property (nonatomic, retain) UIImageView *powerOn; 
@end 

TapStackView.m

#import "TapStackView.h" 

@implementation TapStackView 
@synthesize backgroundImageView, powerOn; 

//Initialize, 
-(id)initWithFrame: (CGRect)frame 
{ 
    if (self = [super initWithFrame:frame]) 
    { 
     //Set up layers. 
     self.backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"layout.png"]]; 

     self.powerOn = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"powerOn.png"]];  
     self.powerOn.center = CGPointMake(159 + powerOn.frame.size.width/2, 26 + powerOn.frame.size.height/2); 

     //Attach to the view. 
     [self addSubview:self.backgroundImageView]; 
     [self addSubview:powerOn];  

     NSLog(@"initWithFrame - powerOn.center is %f, %f", self.powerOn.center.x, self.powerOn.center.y); 

    } 
    return self; 
} 

//Finger touched. 
-(void)touchesBegan: (NSSet*)touches withEvent: (UIEvent*)event 
{ 
    NSLog(@"-----"); 
    NSLog(@"touchesBegan - self.powerOn.center is %f, %f", self.powerOn.center.x, self.powerOn.center.y); 
} 

@end 

콘솔

[Session started at 2010-01-01 21:39:42 +0100.] 
2010-01-01 21:39:44.177 TapStack[6261:20b] initWithFrame - powerOn.center is 186.000000, 53.000000 
2010-01-01 21:39:45.149 TapStack[6261:20b] ----- 
2010-01-01 21:39:45.150 TapStack[6261:20b] touchesBegan - self.powerOn.center is 0.000000, 0.000000 
2010-01-01 21:39:45.978 TapStack[6261:20b] ----- 
2010-01-01 21:39:45.979 TapStack[6261:20b] touchesBegan - self.powerOn.center is 0.000000, 0.000000 
2010-01-01 21:39:48.914 TapStack[6261:20b] ----- 
2010-01-01 21:39:48.915 TapStack[6261:20b] touchesBegan - self.powerOn.center is 0.000000, 0.000000 
2010-01-01 21:39:50.011 TapStack[6261:20b] ----- 
2010-01-01 21:39:50.012 TapStack[6261:20b] touchesBegan - self.powerOn.center is 0.000000, 0.000000 

내가 볼 수없는 이유를 난 그냥 상상할 수없는 touchesBegan 방법 내부 전원 공급 속성. 아이디어가 있으십니까?

답변

1

재현 할 수 없습니다. SuperStackView에 SuperStackView를 어떻게 추가하고 있습니까? 창 기반 템플릿에서, 난 그냥 아래 applicationDidFinishLaunching이 추가 :

[window addSubview:[[[TapStackView alloc] initWithFrame:[window bounds]] autorelease]]; 

당신이 기대하는 것처럼 작동하는 것 같다 :

2010-01-01 17:23:00.873 Untitled[3708:207] initWithFrame - powerOn.center is 215.000000, 90.000000 
2010-01-01 17:23:02.940 Untitled[3708:207] ----- 
2010-01-01 17:23:02.941 Untitled[3708:207] touchesBegan - self.powerOn.center is 215.000000, 90.000000 
2010-01-01 17:23:11.199 Untitled[3708:207] ----- 
2010-01-01 17:23:11.200 Untitled[3708:207] touchesBegan - self.powerOn.center is 215.000000, 90.000000 
2010-01-01 17:23:11.663 Untitled[3708:207] ----- 
2010-01-01 17:23:11.664 Untitled[3708:207] touchesBegan - self.powerOn.center is 215.000000, 90.000000 
2010-01-01 17:23:11.665 Untitled[3708:207] ----- 
2010-01-01 17:23:11.665 Untitled[3708:207] touchesBegan - self.powerOn.center is 215.000000, 90.000000 

이 BTW, 당신은 backgroundImageViewpowerOn 모두를 유출하고 있습니다.

+0

예, 괜찮아 보입니다. 문제가 "TapStackView"보다 높을 수도 있습니다. – Geri

+0

증명해 주셔서 감사합니다. 불필요한 viewController 클래스를 없애기에 충분히 용기를 내십시오. 꼭해야만합니다. 다시 한번 테스트 해 주셔서 감사합니다. – Geri

1

당신은보기에 .userInteractionEnabled을 설정해야합니다

myView.userInteractionEnabled = YES;

문서에서 : 새로운 이미지보기 개체는 기본적으로 사용자 이벤트를 무시하도록 구성됩니다. UIImageView의 사용자 정의 하위 클래스에서 이벤트를 처리하려면 객체 초기화 후 명시 적으로 userInteractionEnabled 속성 값을 YES로 변경해야합니다.

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIImageView_Class/Reference/Reference.html

는 또한 당신은 아마있는 UIImageView 하위 클래스 대신 직선있는 UIImageView의, 당신의 멤버 변수에 대한 것을 사용할 필요가 있다고 생각합니다. UIImageView에서 터치를 감지하려면 UIView 하위 클래스가 아닌 UIImageView 하위 클래스에 touchesBegan 대리자 메서드를 설정해야합니다.

비록, 당신은 당신의 UIView의 접촉을 감지하고 그들이 적절한있는 UIImageView에게

+0

같은 결과로 userInteractionEnabled를 시도했습니다. 유망한 서브 클래 싱. – Geri

0

참고 접촉되어 있는지 CGRectContains을 사용할 수 있습니다 내가있는 UIImageView 파단 디스플레이가 제대로 그들이 할 것을 비 있다고 믿고있어 제로 센터.

드물기는하지만 점 표기법이 제대로 해결되지 않는 경우가 있습니다. 이전에 중첩 된 참조 스타일을 사용해보십시오.

NSLog(@"touchesBegan - self.powerOn.center is %@",NSStringFromCGPoint([[self powerOn] center]); 

이 경우 작동하는 경우 연결 문제가있을 수 있습니다. UIImageViews와 관련된 경고의 결과를 확인하십시오. 때때로 링커는 중첩 클래스의 일부를 잃어 버리는 것처럼 보입니다. 일반적으로 모두 깨끗한 것이 문제를 해결합니다.

+0

잠시 후에 시도해 보겠습니다. – Geri

관련 문제