2011-01-14 3 views
4

Как часть анимации, у меня есть представление, что я хочу углубиться в иерархию представлений. (Я ранее переместил его в начало иерархии представлений, чтобы выполнить анимацию, которая появляется поверх других элементов пользовательского интерфейса.) Я использую этот код, который делает правильную вещь.Переместить представление в новый супервизор без мерцания

CGRect rect = self.profileImage.frame; 
UIView *sv = self.profileImage.superview; 
[self.scrollview addSubview:self.profileImage]; 
rect = [self.scrollview convertRect:rect fromView:sv]; 
self.profileImage.frame = rect; 

Тем не менее, вид мерцает, когда я это делаю. Любые идеи, как избежать мерцания?

ответ

0

попробовать

CGRect rect = self.profileImage.frame; 
UIView *sv = self.profileImage.superview; 
rect = [self.scrollview convertRect:rect fromView:sv]; 
self.profileImage.frame = rect; 
[self.scrollview addSubview:self.profileImage]; 

или

CGRect rect = self.profileImage.frame; 
UIView *sv = self.profileImage.superview; 
self.profileImage.alpha = 0.0f; 
rect = [self.scrollview convertRect:rect fromView:sv]; 
self.profileImage.frame = rect; 
[self.scrollview addSubview:self.profileImage]; 
[UIView animateWithDuration:0.0f animations:^{ 
    self.profileImage.alpha = 1.0f; 
}]; 
0

Я получил эту работу без мерцания с помощью:

CGRect rect = self.profileImage.frame; 
UIView *sv = self.profileImage.superview; 
CGRect convertedRect = [self.scrollview convertRect:rect fromView:sv]; 
[UIView animateWithDuration:0.0 animations:^(void){ 
    [self.profileImage setAlpha:0.0]; 
    [self.profileImage setFrame:convertFrame]; 
    [self.scrollview addSubview:self.profileImage]; 
    [self.profileImage setAlpha:1.0]; 
}]; 
0

В моем случае проблема была, что addSubview была выполнена в фоновом потоке , Вам необходимо выполнить изменение в главной очереди, и оно должно работать нормально.

попробовать

dispatch_async(dispatch_get_main_queue(), ^{ 
    CGRect rect = self.profileImage.frame; 
    UIView *sv = self.profileImage.superview; 
    [self.scrollview addSubview:self.profileImage]; 
    rect = [self.scrollview convertRect:rect fromView:sv]; 
    self.profileImage.frame = rect; 
} 
Смежные вопросы