Добавить и управлять UIImageView Subview из другого класса - PullRequest
0 голосов
/ 24 января 2012

У меня есть два класса: MainViewController и PlayerImageController (NSObject)

Как бы я мог добавить подпредставление моего UIImageView из PlayerImageController в мой MainViewController и диктовать такие действия, как

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.view addSubview:[PlayerImageController addPlayerImage]];
}

- (void)somethingHappened
{
    [PlayerImageController changePlayerImage];
}

и мои методы в моем классе PlayerImageController похожи на

+ (UIImageView *) addPlayerImage
{
    heroPlayerImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"hero-still.png"]];
    [heroPlayerImageView setFrame:CGRectMake(151, 200, 17, 23)];
    return heroPlayerImageView;
}

+ (void) changePlayerImage 
{
  //change image
}

Спасибо!

Ответы [ 2 ]

1 голос
/ 25 января 2012

С одной стороны, я бы не рекомендовал использовать методы класса, но методы экземпляра. Таким образом, вы можете реализовать столько экземпляров вашего класса, сколько вам нужно, и сохранить ссылку на свои экземпляры для их обновления.

С другой стороны, если UIImageView является важным атрибутом вашего класса, я предлагаю вам реализовать его как подкласс UIView (если это не так, вы также можете сделать это как подкласс NSObject) и получить его атрибут UIImageView).

Посмотрите на следующий код:

PlayerImageController.h:

@interface PlayerImageController : UIView{
    UIImageView *_heroPlayerImageView;
}

-(void) changePlayerImage;

PlayerImageController.m:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        _heroPlayerImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"hero-still.png"]];
        // x = 0 and y = 0 because its relative to its parent view, the object itself.
        [_heroPlayerImageView setFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
        [self addSubview:_heroPlayerImageView];
    }
    return self;
}

MainViewController.h:

#import "PlayerImageController.h"

@interface MainViewController : UIViewController{
    PlayerImageController *_player;
}

MainViewController.m:

- (void)viewDidLoad
{
    [super viewDidLoad];
    _player = [[PlayerImageController alloc] initWithFrame:CGRect(151, 200, 17, 23)];
    [self.view addSubview:_player];
}

- (void)somethingHappened
{
    [_player changePlayerImage];
}

Я надеюсь, что это может помочь вам (на самом деле я не пробовал код выше, у него могут быть некоторые синтаксические ошибки).

Если вы не используете ARC, не забудьте сохранить и освободить ваши переменные! Удачи!

1 голос
/ 24 января 2012

Я думаю, что в вашем случае вы должны использовать шаблон делегата.Объявите:

@protocol PlayerImageUpdater
  - createPlayerImage;
  - changePlayerImage;
@end

Затем добавьте:

@interface PlayerImageController <PlayerImageUpdater>

, затем добавьте в MainViewController ivar и свойство наподобие:

@property (...) id<PlayerImageUpdater> playerDelegate;

установите этого делегата как: mainViewController.playerDelegate = playerImageControllerInstance;

и использовать в коде:

[playerDelegate createPlayerImage];
[playerDelegate changePlayerImage];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...