Uıview çoğaltması

bir görünümü çoğaltmam gerekiyor, tüm alt bakışlarla.

nasıl yapılacağını bilen var mı?

9
tarihinde sordu Suragch 2010-01-25 12:45:14
kaynak

6 ответов

en kolay (ama muhtemelen en hızlı değil) yol, bir NSData nesnesine arşivlemek ve hemen arşivlemektir.

NSData *tempArchive = [NSKeyedArchiver archivedDataWithRootObject:myView];
UIView *myViewDuplicate = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchive];
23
cevap Ole Begemann 2010-01-25 12:57:14
kaynak

herhangi bir uıımage nesne arşivlemek için sadece bir tür veya başka bir ımagerep dönüştürmek (örneğin PNG) ve Arşiv o NSData nesne, sonra unarchive imageWithData ile uıımage geri:

3
cevap April 2011-06-11 11:44:28
kaynak

işte kullanabileceğiniz yeni bir yöntem: Uıview'ın yöntemini kullanın:

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates

bu bir görünüm çizmek için en hızlı yoludur. IOS 7'de mevcuttur.

0
cevap Lei Zhang 2015-04-09 09:27:13
kaynak

bir kolayca arşivleme ve unarchiving işlemi ile bir Uıview kopyalayabilirsiniz.

NSData *tempArchive = [NSKeyedArchiver archivedDataWithRootObject:myView];
UIView *myViewDuplicate = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchive];

ama bu uıımageview yok sayar, bu yüzden Uıımageview bu şekilde yapmak için,

UIImage *img = [UIImage imageNamed: @"myImage"];
UIImage *img2 = [UIImage imageWithCGImage:img.CGImage scale:img.scale orientation:img.imageOrientation];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:img2];
UIImage *imgCopy = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"%@, %@", imgCopy, NSStringFromCGSize(imgCopy.size)); // -> <UIImage: 0x7fa013e766f0>, {50, 53}

Refrence buradan.

0
cevap Akshay Sunderwani 2017-05-23 15:00:56
kaynak

Swift versiyonu

bu cevap, kabul edilen cevabın nesnel olarak yaptığı gibi Swift'de aynı şeyi nasıl yapacağını gösterir-C.

let tempArchive = NSKeyedArchiver.archivedDataWithRootObject(myView)
let myViewDuplicate = NSKeyedUnarchiver.unarchiveObjectWithData(tempArchive) as! UIView

daha fazla not içeren tam cevabım burada .

0
cevap Suragch 2017-05-23 15:06:50
kaynak

enter image description here

viewController kök görünümü dışında özel görünüm sürükleyebilirsiniz. Özel görünüm sınıfının uygulanmasında geçersiz kılma enconde / decode yöntemleri. IBOutlets ve Ibout bağlantıları bellekte arşivlenmiş olmayacak fark.

@implementation MyCustomView

-(MyCustomView*)aCopy{
    NSData *temp = [NSKeyedArchiver archivedDataWithRootObject:self];
    return [NSKeyedUnarchiver unarchiveObjectWithData:temp];
}


- (void)encodeWithCoder:(NSCoder *)coder {
    [super encodeWithCoder:coder];

    [coder encodeObject:self.btnBack forKey:@"btnBack"];
    [coder encodeObject:self.lbl1 forKey:@"lbl1"];
}

-(instancetype)initWithCoder:(NSCoder *)aDecoder{

    self = [super initWithCoder:aDecoder];
    if (self) {
        self.btnBack = [aDecoder decodeObjectForKey:@"btnBack"];
        self.lbl1 = [aDecoder decodeObjectForKey:@"lbl1"];
        [_btnBack addTarget:self action:@selector(onBtnBack) forControlEvents:UIControlEventTouchUpInside];
    }
    return self;
}

- (IBAction)onBtnBack{
    //. . .

MyCustomView.h:

#import <UIKit/UIKit.h>

@interface MyCustomView : UIView

@property (weak, nonatomic) IBOutlet UILabel *lbl1;
@property (weak, nonatomic) IBOutlet UIButton *btnBack;

-(MyCustomView*)aCopy;

@end

Viewcontroller'daki özel görünümü yeniden kullanma örneği.metre:

#import "ViewController.h"
#import "MyCustomView.h"

@interface ViewController ()
@property (strong, nonatomic) IBOutlet MyCustomView *myCustomView;
@property (weak, nonatomic) IBOutlet UIView *vwPlaceHolder;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:_myCustomView];
}

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    MyCustomView *vwCopy = [_myCustomView aCopy];
    vwCopy.lbl1.text = @"My other msg";
    vwCopy.frame = _vwPlaceHolder.frame;
    [_vwPlaceHolder removeFromSuperview];
    [self.view addSubview:vwCopy];

}
@end
0
cevap Miguel Gallego 2016-05-11 17:22:22
kaynak

Diğer sorular ios objective-c uiview