1

我想在我的应用中制作广告横幅。有点像iAd的。

我打算通过在视图上有一个 UIImage 然后分配横幅图像来实现它。然后我会添加一个触摸手势,以便用户可以单击它并转到我的应用程序中的另一个视图。我知道我可以很容易地在一个视图上执行此操作,但我希望它出现在应用程序中的大多数视图上。将横幅添加到多个视图而无需多次编写相同代码的最佳方法是什么?

下面的设计显示了我之后的那种横幅。

谢谢

赞助商横幅

4

5 回答 5

4
#import <UIKit/UIKit.h>
@class custom;

@protocol adDelegate
- (void)viewAd:(NSString *)adRate;
@end


@interface custom : UIView


@property (strong, nonatomic) UIImage *viewImage;
@property (assign) id <adDelegate> delegate;

@end

// 主类

#import "custom.h"

@implementation custom

@synthesize viewImage;
@synthesize delegate;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame];
        imageView.image = viewImage;
        [self addSubview:imageView];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder 
{
    if ((self = [super initWithCoder:aDecoder])) 
    {

    }
    return self;
}

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

    [self.delegate viewAd:@"view"];
}
于 2013-01-07T14:32:37.300 回答
1

尝试从 UIView 创建一个父类,在其中使用 UIImageView 和手势识别器执行横幅的所有显示和处理。然后,无论哪个视图需要此功能,都从该父类派生它们,并覆盖方法中的默认处理,以便您可以自定义子类中的行为。

于 2013-01-07T14:10:17.127 回答
1

几点建议:

首先,为什么不直接使用 aUIButton而不是UIImage带有手势的 a 呢?毕竟,您真正要做的只是复制按钮功能......

其次,我可能会通过创建一个包含 UIButton 的类来解决整体问题,如下所示:

@interface YourSuperViewController : UIViewController

@property (nonatomic, strong) IBOutlet UIButton *adButton;

- (IBAction)adTouched:(id)sender;

@end

viewDidLoad此类中,创建按钮并将其添加到视图中,并将您的广告特定逻辑添加到adTouched操作中。

然后在您的应用程序中创建其余视图作为YourSuperViewController. 像这样:

@interface SomeOtherViewController : YourSuperViewController

现在SomeOtherViewController将自动神奇地拥有广告按钮并正确响应触摸它。完毕!

于 2013-01-07T14:16:14.137 回答
1

例如,您可以创建一个 UIView 类并将其称为 BannerView。// 在bannerView.h中

    #import <UIKit/UIKit.h>
@interface BannerView : UIView{ 
    UIImageView* bannerImage;
}
@property(nonatomic,retain) UIImageView* bannerImage;    
@end

//在bannerView.m中

#import "BannerView.h"

@implementation BannerView
@synthesize bannerImage;

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


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code

    bannerImage=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"banner-image.png"]];
    bannerImage.frame=CGRectMake(0, 0, 320, 100);
    [self addSubview:bannerImage];

// add a uibutton on top of the uiimageview and assign an action for it 
// better than creating an action recogniser

    UIButton* actionButton=[UIButton buttonWithType:UIButtonTypeCustom];
    actionButton.frame=CGRectMake(0, 0, 320, 100);
    [actionButton addTarget:self action:@selector(yourAction) forControlEvents:UIControlEventTouchUpInside];

    [self addSubview:actionButton];
}

-(void) yourAction{
// do what ever here like going to an other uiviewController as you mentionned 

}

@end

现在您可以通过这种方式从任何视图控制器调用此视图

 BannerView* banner=[[BannerView alloc] initWithFrame:CGRectMake(0, 300, 320, 100)];
    [self.view addSubview:banner];
于 2013-01-07T14:22:21.210 回答
1

其他人说的都是最好的方法。如果您需要自定义功能,子类化可能是要走的路。

我只是想添加一个迂腐的东西。重要的是要记住 UIImage 不是视图。屏幕上从来没有出现过 UIImage。UIImage 是一个模型对象。它只是数据的集合。UIImageView 是一个视图对象,因此,UIImageView 可以在屏幕上显示自己。

这可能看起来过于迂腐和吹毛求疵,但是为了有效地使用 MVC(模型、视图、控制器),将这些事情整理在我们的脑海中很重要

于 2013-01-07T15:52:13.550 回答