Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用objective-c自定义UIView_Objective C_Ios_Cocoa Touch_Uiview - Fatal编程技术网

使用objective-c自定义UIView

使用objective-c自定义UIView,objective-c,ios,cocoa-touch,uiview,Objective C,Ios,Cocoa Touch,Uiview,我想编写一个自定义的ui视图,它执行以下操作: 它获取图像并将其添加到视图中 它有一个翻转图像的方法 我想将此自定义UIView传递给iCarousel类: 如何使用Objective C和Cocoa创建自定义UIView 我首先做了以下工作: 城市h #import <UIKit/UIKit.h> @interface CItem : UIView { UIImageView *box; } @property (nonatomic, retain) UIImag

我想编写一个自定义的
ui视图
,它执行以下操作:

  • 它获取图像并将其添加到视图中
  • 它有一个翻转图像的方法
我想将此自定义
UIView
传递给
iCarousel
类:

如何使用Objective C和Cocoa创建自定义
UIView

我首先做了以下工作:

城市h

#import <UIKit/UIKit.h>

@interface CItem : UIView
{
    UIImageView *box;
}

@property (nonatomic, retain) UIImageView * box;


@end

如果要进行自定义绘图,则应仅实现drawRect。如果要使用子视图,只需将代码移动到initWithFrame中即可:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
       box = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 240.0f, 240.0f)];
       [box setImage:[UIImage imageNamed:@"cleaning"]];
       [self addSubview:box];
    }
    return self;
}

您可以安全地删除drawRect方法。不确定“翻转”图像是什么意思,但您应该能够使用自定义类的“box”属性操纵imageView对象。

如果您打算进行自定义绘图,则只应实现drawRect。如果要使用子视图,只需将代码移动到initWithFrame中即可:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
       box = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 240.0f, 240.0f)];
       [box setImage:[UIImage imageNamed:@"cleaning"]];
       [self addSubview:box];
    }
    return self;
}

您可以安全地删除drawRect方法。不确定“翻转”图像是什么意思,但您应该能够使用自定义类的“box”属性操作imageView对象。

您不应该在
drawRect:
中添加
addSubview:
。请参阅此方法的讨论:

讨论

此方法的默认实现不执行任何操作。 使用本机绘图技术(如核心图形)的子类 和UIKit)绘制视图内容时,应覆盖此方法 并在那里实现他们的绘图代码。您不需要重写 如果视图以其他方式设置其内容,则使用此方法。例如 如果您的视图仅显示一个视图,则不需要重写此方法 背景色,或者如果视图直接使用 底层对象。类似地,您不应该覆盖此选项 方法,如果视图使用OpenGL ES进行绘制

如果您没有为
CItem
使用xib文件,您可以将代码添加到
initWithFrame:

//CItem.h
#import <UIKit/UIKit.h>

@interface CItem : UIView

- (void)flip;

@end

// CItem.m
#import "CItem.h"

@interface CItem()

@property (assign, nonatomic) BOOL displayingPrimary;

@property (strong, nonatomic) UIImageView *primaryView;
@property (strong, nonatomic) UIImageView *secondaryView;

@end

@implementation CItem

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        _primaryView = [[UIImageView alloc] initWithFrame:frame];
        [_primaryView setImage:[UIImage imageNamed:@ "cleaning.jpg"]];
        [self addSubview:_primaryView];

        _secondaryView = [[UIImageView alloc] initWithFrame:frame];
        [_secondaryView setImage:[UIImage imageNamed:@ "adding.jpg"]];
        [self addSubview:_secondaryView];

    }
    return self;
}

- (void)flip
{
    [UIView transitionFromView:(self.displayingPrimary ? self.primaryView : self.secondaryView)
                        toView:(self.displayingPrimary ? self.secondaryView : self.primaryView)
                      duration:1.0
                       options:(self.displayingPrimary ? UIViewAnimationOptionTransitionFlipFromRight :
                                UIViewAnimationOptionTransitionFlipFromLeft) | UIViewAnimationOptionShowHideTransitionViews
                    completion:^(BOOL finished) {
                        if (finished) {
                            self.displayingPrimary = !self.displayingPrimary;
                        }
                    }];
}

@end

您不应该在
drawRect:
中添加
addSubview:
。请参阅此方法的讨论:

讨论

此方法的默认实现不执行任何操作。 使用本机绘图技术(如核心图形)的子类 和UIKit)绘制视图内容时,应覆盖此方法 并在那里实现他们的绘图代码。您不需要重写 如果视图以其他方式设置其内容,则使用此方法。例如 如果您的视图仅显示一个视图,则不需要重写此方法 背景色,或者如果视图直接使用 底层对象。类似地,您不应该覆盖此选项 方法,如果视图使用OpenGL ES进行绘制

如果您没有为
CItem
使用xib文件,您可以将代码添加到
initWithFrame:

//CItem.h
#import <UIKit/UIKit.h>

@interface CItem : UIView

- (void)flip;

@end

// CItem.m
#import "CItem.h"

@interface CItem()

@property (assign, nonatomic) BOOL displayingPrimary;

@property (strong, nonatomic) UIImageView *primaryView;
@property (strong, nonatomic) UIImageView *secondaryView;

@end

@implementation CItem

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        _primaryView = [[UIImageView alloc] initWithFrame:frame];
        [_primaryView setImage:[UIImage imageNamed:@ "cleaning.jpg"]];
        [self addSubview:_primaryView];

        _secondaryView = [[UIImageView alloc] initWithFrame:frame];
        [_secondaryView setImage:[UIImage imageNamed:@ "adding.jpg"]];
        [self addSubview:_secondaryView];

    }
    return self;
}

- (void)flip
{
    [UIView transitionFromView:(self.displayingPrimary ? self.primaryView : self.secondaryView)
                        toView:(self.displayingPrimary ? self.secondaryView : self.primaryView)
                      duration:1.0
                       options:(self.displayingPrimary ? UIViewAnimationOptionTransitionFlipFromRight :
                                UIViewAnimationOptionTransitionFlipFromLeft) | UIViewAnimationOptionShowHideTransitionViews
                    completion:^(BOOL finished) {
                        if (finished) {
                            self.displayingPrimary = !self.displayingPrimary;
                        }
                    }];
}

@end
我尝试了:-(UIView*)旋转木马:(iCarousel)旋转木马viewForItemAtIndex:(nsInteger)索引重用视图:(UIView*)视图{//创建一个编号视图/视图=[[UIImageView alloc]initWithImage:[UIImageName:[Animages objectAtIndex:index]];返回视图;*/cRect frame=cRectMake(圆形)((self.view.bounds.size.width-300)/2.0),0,300,300;view=[[CItem alloc]initWithFrame:frame];返回视图;}我尝试了:-(UIView*)carousel:(iCarousel)carousel viewForItemAtIndex:(NSUInteger)索引重用视图:(UIView*)视图{//创建编号视图/视图=[[UIImageView alloc]initWithImage:[UIImage ImageName:[Animages ObjectatinIndex:index]];返回视图;*/CGRect frame=CGRectMake(round((self.view.bounds.size.width-300)/2.0),0,300,300;视图=[[CItem alloc]initWithFrame:frame];返回视图;}