addSubview:
にを追加しないでくださいdrawRect:
。このメソッドの説明を参照してください。
討論
このメソッドのデフォルトの実装は何もしません。ネイティブの描画テクノロジー(Core GraphicsやUIKitなど)を使用してビューのコンテンツを描画するサブクラスは、このメソッドをオーバーライドし、そこに描画コードを実装する必要があります。ビューが他の方法でコンテンツを設定する場合は、このメソッドをオーバーライドする必要はありません。たとえば、ビューに背景色が表示されるだけの場合、またはビューが基になるレイヤーオブジェクトを使用してコンテンツを直接設定する場合は、このメソッドをオーバーライドする必要はありません。同様に、ビューがOpenGL ESを使用して描画を行う場合は、このメソッドをオーバーライドしないでください。
にxibファイルを使用しない場合はCItem
、にコードを追加できます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
CItem
次に、次のように使用できます。
CItem *subView = [[CItem alloc] initWithFrame:CGRectMake(0, 0, 320, 400)];
[self.view addSubview:subView];