Я нашел здесь решение Как перевернуть отдельный UIView (не переворачивая родительский вид)
но мне кажется, что это не работает. В Interface Builder я настроил все с помощью uiview и внутри этих двух uiview с одинаковым размером и первым представлением, которое будет отображаться сверху, и я создал три выхода для этих трех представлений.
В viewDidLoad:
[self.view addSubview:self.contentView]
[self.contentView addSubview:firstView]
[self.contentView addSubview:secondView]
у меня есть uigesture. Когда пользователь касается экрана, IBAction выполняет переворот:
-(IBAction)flip:(id *)sender
{
if(faceUp){
// execute transition from firstview to second
}else{
//execute transition from secondview to first
}
faceUp = !faceUp;
}
это работает отлично, когда я щелкаю первый раз, и сальто происходит от первого до второго, затем, если я снова нажимаю, переворот начинается, а затем заканчивается ничем, представление исчезает и остается представлением контейнера, не показывающим ничего, потому что его цвет установлен на очистку . Как я могу решить эту проблему?
Это контроллер с методом касания и тремя выходами:
#import "ContactViewController.h"
#import "InfoContactView.h"
#import "ImageLogoView.h"
@interface ContactViewController ()
@property (strong, nonatomic) IBOutlet InfoContactView *contactInfoView;
@property (strong, nonatomic) IBOutlet ImageLogoView *imageLogoView;
@property (nonatomic) BOOL faceUp;
@property (strong, nonatomic) IBOutlet UIView *parentView;
@end
@implementation ContactViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.parentView.backgroundColor =[UIColor clearColor];
[self.view addSubview:self.parentView];
[self.parentView addSubview:self.contactInfoView];
[self.parentView addSubview:self.imageLogoView];
self.faceUp = NO;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)setFaceUp:(BOOL)faceUp
{
_faceUp = faceUp;
}
-(void)setParentView:(UIView *)parentView
{
_parentView =parentView;
}
-(void)setContactInfoView:(InfoContactView *)contactInfoView
{
_contactInfoView = contactInfoView;
}
-(void)setImageLogoView:(ImageLogoView *)imageLogoView
{
_imageLogoView = imageLogoView;
}
- (IBAction)showInfo:(UITapGestureRecognizer *)sender {
if (self.faceUp == NO) {
[UIView transitionFromView:self.imageLogoView toView:self.contactInfoView
duration:1.5
options:UIViewAnimationOptionTransitionFlipFromLeft
completion:NULL];
NSLog(@"Pass from logo to info : imageLogoView = %@",self.imageLogoView.description);
NSLog(@"dettagli = %@",self.contactInfoView);
}
else if(self.faceUp == YES){
[UIView transitionFromView:self.contactInfoView toView:self.imageLogoView
duration:1.5
options:UIViewAnimationOptionTransitionFlipFromRight
completion:NULL];
NSLog(@"Pass from info to logo: imageLogoView = %@",self.imageLogoView.description);
NSLog(@"dettagli = %@",self.contactInfoView);
}
self.faceUp = !self.faceUp;
}
@end
-flip
методе? Мне кажется, что ссылка наfirstView
установлена наnil
где-то в вашем коде. - person Mischa   schedule 16.02.2014