我想在我的应用中制作广告横幅。有点像iAd。
我打算通过在视图上使用UIImage然后分配横幅图像来实现它。然后我会添加一个触摸手势,以便用户可以单击它并转到我的应用程序中的另一个视图。我知道我可以很容易地在一个视图上执行此操作,但我希望这可以在应用程序中的大多数视图上。什么是将横幅添加到多个视图的最佳方法,而不是一次编写相同的代码?
以下设计显示了后面的横幅。
由于
答案 0 :(得分: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"];
}
答案 1 :(得分:1)
尝试从UIView创建父类,您可以使用UIImageView和手势识别器完成所有横幅的显示和处理。然后,无论哪个视图需要此功能,都从此父类派生它们,并覆盖方法中的默认处理,以便您可以自定义子类中的行为。
答案 2 :(得分:1)
一些建议:
首先,为什么不使用UIButton
而不是UIImage
与手势?所有你真正做的就是复制按钮功能......
其次,我可能通过创建一个包含UIButton的类来解决整个问题,如下所示:
@interface YourSuperViewController : UIViewController
@property (nonatomic, strong) IBOutlet UIButton *adButton;
- (IBAction)adTouched:(id)sender;
@end
在此课程的viewDidLoad
中,创建按钮,然后将其添加到视图中,并将特定于广告的逻辑添加到adTouched
操作中。
然后在您的应用中创建其余视图作为YourSuperViewController
的实例。像这样:
@interface SomeOtherViewController : YourSuperViewController
现在,SomeOtherViewController
会自动神奇地拥有广告按钮并正确回应。完成!
答案 3 :(得分: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
现在您可以通过这种方式从任何View Controller调用此视图
BannerView* banner=[[BannerView alloc] initWithFrame:CGRectMake(0, 300, 320, 100)];
[self.view addSubview:banner];
答案 4 :(得分:1)
其他人说的是最好的方式。如果您需要自定义功能,可能需要进行子类化。
我只想添加一个迂腐的东西。重要的是要记住UIImage不是一个视图。从来没有在屏幕上出现过UIImage。 UIImage是一个模型对象。它只是一个数据集合。 UIImageView是一个视图对象,因此,UIImageView可以在屏幕上显示自己。
这可能看起来过于迂腐和挑剔,但为了有效地使用MVC(模型,视图,控制器),将这些事情整理在我们头脑中非常重要