如何将UIGmage与UIGesture添加到应用程序中的大多数视图。

时间:2013-01-07 13:47:03

标签: iphone objective-c ios xcode

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

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

以下设计显示了后面的横幅。

由于

Sponsor banners

5 个答案:

答案 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(模型,视图,控制器),将这些事情整理在我们头脑中非常重要