Для перекрестного растворения в обычном контроллере представления вы можете установить для его modalTransitionStyle значение UIModalTransitionStyleCrossDissolve, а затем представить его модально.
Чтобы выполнить перекрестное растворение между некоторой парой подпредставлений (ограниченных их фреймами CGRects), вы можете использовать этот метод UIView:
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion.
Вот как вы можете использовать это в коде:
@interface ViewController ()
@property(strong,nonatomic) UIView *redView;
@property(strong,nonatomic) UIView *blueView;
@end
@implementation ViewController
@synthesize redView=_redView;
@synthesize blueView=_blueView;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.redView = [[UIView alloc] initWithFrame:CGRectMake(40.0, 40.0, 240.0, 100.0)];
self.redView.backgroundColor = [UIColor redColor];
[self.view addSubview:self.redView];
self.blueView = [[UIView alloc] initWithFrame:CGRectMake(40.0, 40.0, 240.0, 100.0)];
self.blueView.backgroundColor = [UIColor blueColor];
}
- (IBAction)crossDisolve:(id)sender {
UIView *fromView = (self.redView.superview)? self.redView : self.blueView;
UIView *toView = (fromView==self.redView)? self.blueView : self.redView;
[UIView transitionFromView:fromView
toView:toView
duration:1.0
options:UIViewAnimationOptionTransitionCrossDissolve
completion:^(BOOL finished) {NSLog(@"done!");}
];
// now the fromView has been removed from the hierarchy and the toView has been added
// please note that this code depends on ARC to release objects correctly
}
Более сложная часть вашего вопроса - идея сделать этот новый подвид «модальным», с помощью которого, я полагаю, вы подразумеваете, что он охватывает только часть экрана, но фокусируется исключительно на входе.Самое близкое к этому в SDK - это UIAlertView.