2010-12-01 3 views
1

I'v создал приложение на основе представления. И добавлен новый класс, который простирается от UIView. Этот класс содержит в себе некоторые элементы управления (простые элементы управления). Теперь я хочу отображать/скрывать этот элемент управления, когда пользователь нажимает на что-то. Управление должно отображаться как окно оверлея. По всем другим элементам управления. Я стараюсь это делать так:Пользовательский контроль не отображается в окне

- (void)viewDidLoad { 
    [super viewDidLoad];   
    addSubview:myOverlayChannelPicker; 
} 

Все идет хорошо, отлаживается в пользовательский код управления, но ничего не отображается на экране. Я попытался добавить его вручную, и он работает, но мне нужно добавить его во время выполнения. Что может быть причиной отсутствия контроля?

Полный код для OverlayChannelPicker

@implementation OverlayChannelPicker 
@synthesize myImage; 
@synthesize img1; 
@synthesize img2; 

- (id)initWithFrame:(CGRect)frame { 
    if ((self = [super initWithFrame:frame])) { 
     // Initialization code 
    } 
    return self; 
} 

- (void)awakeFromNib{ 
    img1 = [UIImage imageNamed:@"imgTest.jpg"]; 
    img2 = [UIImage imageNamed:@"imgTest2.jpg"]; 

    arrayOfImages = [[NSMutableArray alloc] init]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 

    scrollView = [[UIScrollView alloc] init]; 
    scrollView.scrollEnabled = YES; 
    scrollView.pagingEnabled = NO; // for smooth scroll 
    scrollView.directionalLockEnabled = YES; 
    scrollView.showsVerticalScrollIndicator = NO; 
    scrollView.showsHorizontalScrollIndicator = NO; 
    scrollView.delegate = self; 
    //scrollView.backgroundColor = [UIColor blueColor]; 
    scrollView.autoresizesSubviews = YES; 
    scrollView.frame = CGRectMake(0, 150, 320, 128); 
    [scrollView setContentSize:CGSizeMake(1620, 128)]; 
    [self addSubview:scrollView]; 

    UIImage *imageToAdd; 
    int x = 0; 
    int y = 0; 
    for(imageToAdd in arrayOfImages) 
    {  
     UIImageView *temp = [[UIImageView alloc] initWithImage:imageToAdd];  

     temp.frame = CGRectMake(x, y, 128, 128); 
     temp.userInteractionEnabled = YES;  
     x += 135; 


     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)]; 
     [temp addGestureRecognizer:tap];  

     [scrollView addSubview:temp]; 
    } 

} 

- (void)imageTapped:(UIGestureRecognizer *)sender 
{  
    UIImageView *iv = (UIImageView *)[sender view]; 
    UIImage *image = [iv image]; 
    UIImage *it = [arrayOfImages indexOfObject:image]; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:iv cache:YES]; 

    if(it == img1) 
     it = img2; 
    else 
     it = img1; 

    [UIView commitAnimations]; 
} 

И это заголовок:

@interface OverlayChannelPicker : UIView <UIScrollViewDelegate>{ 
    IBOutlet UIImageView *myImage; 
    UIImage *img1; 
    UIImage *img2; 

    IBOutlet UIScrollView *scrollView; 
    int view1Index; 
    int view2Index; 
    NSMutableArray *arrayOfImages; 

} 
@property (nonatomic, retain) UIImageView *myImage; 
@property (nonatomic, retain) UIImage *img1; 
@property (nonatomic, retain) UIImage *img2; 
@property (nonatomic, retain) UIScrollView *scrollView; 

- (void)awakeFromNib; 
@end 
+0

Но как вы создаете `myOverlayChannelPicker`? Вы подтвердили, что это не ноль? – 2010-12-01 15:23:02

+0

Я добавил в заголовок: OverlayChannelPicker * myOverlayChannelPicker; и добавил свойство/синтезировал для него. А затем вызовите [self.view addSub ...]; – 1110 2010-12-01 19:36:15

ответ

0

Вы, вероятно, хотите, чтобы сделать вызов, как это:

[self.view addSubview:myOverlayChannelPicker]; 

По внешнему виду вашего публикуемую кода Я должен предположить, что раньше вы не делали никаких объективных разработок. Если это так, вы должны, вероятно, начать здесь Introduction to The Objective-C Programming Language, чтобы осветить основы.

Смежные вопросы