2013-03-29 5 views
1

A UIScrollView содержит 5 UIView s. В основном я хочу расширять и сворачивать их, когда пользователь прикасается к любому из UIView.Сброс UIView автоматически при прокрутке

Код для анимации globalPressReleasesView расширить:

  [UIView beginAnimations:@"Expand" context:nil]; 
      [UIView setAnimationDuration:1.0]; 
      [UIView setAnimationDelegate:self]; 

           [globalPressReleasesView setFrame:CGRectMake(globalPressReleasesView.frame.origin.x, globalPressReleasesView.frame.origin.y, globalPressReleasesView.frame.size.width, globalPressReleasesView.frame.size.height + [globalPressReleasesArray count]*105)]; 

           [financialPressReleasesView setFrame:CGRectMake(financialPressReleasesView.frame.origin.x, financialPressReleasesView.frame.origin.y + [globalPressReleasesArray count]*105, financialPressReleasesView.frame.size.width, financialPressReleasesView.frame.size.height)]; 


           [newOnCscView setFrame:CGRectMake(newOnCscView.frame.origin.x, newOnCscView.frame.origin.y + [globalPressReleasesArray count]*105, newOnCscView.frame.size.width, newOnCscView.frame.size.height)]; 

           [latestEventsView setFrame:CGRectMake(latestEventsView.frame.origin.x, latestEventsView.frame.origin.y + [globalPressReleasesArray count]*105, latestEventsView.frame.size.width, latestEventsView.frame.size.height)]; 

           [latestCaseStudiesView setFrame:CGRectMake(latestCaseStudiesView.frame.origin.x, latestCaseStudiesView.frame.origin.y + [globalPressReleasesArray count]*105, latestCaseStudiesView.frame.size.width, latestCaseStudiesView.frame.size.height)]; 

           [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height + [globalPressReleasesArray count]*105)]; 

      [UIView commitAnimations]; 

Другие XIB свойства:

каждый UIView обрезается scrollview.autoresize = YES

Проблема:

«globalPressReleasesView» отлично расширяется, но когда я прокручиваю свой scrollview. globalPressReleasesView frame возвращает себя к исходным значениям фрейма, определенным в xib.

Может кто-нибудь догадаться, в чем проблема?

+0

один раз проверить методы делегата scrollview – Balu

+0

да, это так, как я узнал, значения всех содержащихся '' кадров UIView '' сбрасываются. '- (void) scrollViewDidScroll: (UIScrollView *) scrollView' – turtle

+0

проверить файл globalPressReleasesView в этом методе? – Balu

ответ

3

Во-первых, давайте упростить код немного:

CGFloat heightDifference = [globalPressReleasesArray count] * 105.0f; 

CGRect globalPressReleasesViewFrame = globalPressReleasesView.frame; 
globalPressReleasesViewFrame.size.height += heightDifference; 
globalPressReleasesView.frame = globalPressReleasesViewFrame; 

NSArray* movedViews = @[financialPressReleasesView, newOnCscView, latestEventsView, latestCaseStudiesView]; 

for (UIView* movedView in movedViews) { 
    CGRect movedViewFrame = movedView.frame; 
    movedViewFrame.origin.y += heightDifference; 
    movedView.frame = movedViewFrame 
} 

CGSize contentSize = scrollView.frame.size; 
contentSize.height += heightDifference; 
[scrollView setContentSize:contentSize]; 

Теперь совершенно ясно, что код делает.

Код абсолютно ошибочный. Я бы рекомендовал вам проверить, какие значения вы задаете для фреймов (NSLog или точка останова).

Обратите внимание, что существует только два способа изменения рамки представления. 1. Вы меняете его кодом 2. Он авторезистентен, потому что вы изменили его кадр предка (или когда пользователь переключает портретный/альбомный режим).

+0

Я поставил точку останова на делегат scrollview, чтобы определить, когда UIView будет изменен. Когда я запускаю прокрутку UIScrollView, первое значение для кадра UIView является хорошим, а затем переходит к предыдущим значениям. Могу ли я поставить точку останова в другое место, чтобы это сделать. – turtle

+0

Я изменил способ кодирования. Я взял эти 'UIView' как разделы 'UITableView', а свойства tableview сами контролируют все .. :) – turtle

-4

Попробуйте создать представления программно, не определяйте их в .xib-файлах.

Определение элементов пользовательского интерфейса программно - профессиональная и хорошая практика программирования. Профессиональные разработчики iOS никогда не используют .xib или раскадровки.

+0

На самом деле, использование файлов .xib является рекомендуемой практикой в ​​любой (профессиональной или любительской) разработке. Во-первых, это быстрее. Во-вторых, вы не загрязняете свой код «магическими» номерами для кадров просмотра. Это не область Obj-C и XCode. Существует причина, почему почти каждый язык программирования имеет визуальный дизайнер. – Sulthan

+0

Думаю, вы новичок в iOS Development. Я советую вам прочитать больше статей о развитии iOS и поговорить с программистами, которые разработали успешные приложения. Существует много дискуссий по этой теме. И да, никогда не оскорбительны при написании комментариев. Этот сайт предназначен для изучения и устранения сомнений, а не для обмена суровыми комментариями. –

+0

[link] (http://blog.shinetech.com/2011/07/23/when-should-new-ios-developers-start-using-interface-builder/) –

Смежные вопросы