2012-04-28 6 views
11

私はUIViewを別のUIViewと同様に最初のものにレンダリングさせる方法を考えています。だから私はそれの境界と私のメインのUIViewを持って、UIViewはまた、いくつかの他のUIViewでレンダリングします。iOS iPhoneでUIViewを複製し、それを2つのUIViewに描画することは可能ですか?

これは可能ですか?大規模なレイヤー操作が必要ですか?

+0

新しいインスタンスを作成する以外の方法でレンダリングしますか?結局のところ、オブジェクトです。 – jmstone617

答えて

14

実際の意図は何であるか分かりませんが、これはビューを2回描きます。ユーザーインタラクションなどは2番目のビューでは機能しません。また、このソリューションは異なるフレームサイズを処理しません。あなたは今、あなただけのcloneViewを呼び出すことができますし、どこかにあなたがしたいことを追加

#import "SrcView.h" 
#import "CloneView.h" 

@implementation SrcView 
@synthesize cloneView; 

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{ 
    [cloneView setNeedsDisplay]; 
} 

- (UIView *)cloneView { 
    if (!cloneView) { 
     cloneView = [[CloneView alloc] initWithView:self]; 
    } 
    return cloneView; 
} 

@end 

@implementation CloneView 
@synthesize srcView; 

- (id)initWithView:(UIView *)src { 
    self = [super initWithFrame:src.frame]; 
    if (self) { 
     srcView = src; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    [srcView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
} 

@end 

のクローンを作成したいビューの

@interface SrcView : UIView 
@property(nonatomic, readonly, strong) UIView *cloneView; 
@end 

@interface CloneView : UIView 
@property(nonatomic, weak) UIView *srcView; 
- (id)initWithView:(UIView *)src; 
@end 

実装のクローンを作成したいビューの

ヘッダー。

+0

これはすばらしい動作をします..すばらしい例です。 –

5

これは、StackOverflowでここで質問されているようです。たとえば、次のように

iphone, ipad Duplicate UIView - Cloned View

Copying the drawn contents of one UIView to another

UIView duplicate

Duplicate, clone or copy UIView

しかし、それはこれをやってくれたならば、私の最初のアプローチは、私がしたいUIViewへのハンドルを取得することですコピーした後、再帰的にそれをすべてsubviewsで繰り返し、次にコピー &それらをサブビューとしてUIViewに追加します。メインのUIViewをコピーします。

レイヤー操作が多すぎるとは思いませんが、アウトレットやアクションをプログラムで再構築する方法を理解する必要があります。

+2

それらをサブビューとして追加すると、基本的にそれらのアイテムを別の親ビューの下に移動して、コピーしないで移動します。 –

0

"複製"したい別のインスタンスを作成し、別のビューにサブビューとして追加します。あなたは実際にUIView オブジェクトをクローンしていないので、単純に別のインスタンスを作成します。

2

ビューを複製し、2つのビューを1行のコードで簡単に更新する方法はありません。それらの根底にあるCALayersが異なるからです。使用のUIViewのメソッド::しかし、UIViewのを複製するために、ここで使用できる新しい方法がある

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates 

これは、ビューを描画するための最速の方法です。 iOS 7で利用可能です。

関連する問題