2015-05-08 2 views
0

У меня есть растягиваемый заголовок, который я сделал после этого урока http://blog.matthewcheok.com/design-teardown-stretchy-headers/. Во всяком случае, он работает отлично, но у меня возникают проблемы с тем, что UIView поверх него исчезает, когда изображение растягивается и возвращается к исходной альфе, когда представление возвращается в нормальное состояние. Лучшее, что я мог придумать, заключается в следующем:Как заставить UIImage исчезать и исчезать при прокрутке?

override func 

    scrollViewDidScroll(scrollView: UIScrollView) { 
      updateHeaderView() 
      var offset = scrollView.contentOffset.y 
      if offset < -170 { 

       headerBlurImageView?.alpha = max(0.0, offset - 95/35) 
      } else { 
      self.headerBlurImageView?.alpha = 1 
      } 
     } 

Но он едва работает. Не существует плавного перехода между альфаами, и когда представление возвращается к нормальному, альфа не возвращается. Любые советы или подсказки?

Обновление: мне удалось сделать прямо противоположное тому, что я хотел: р Вот код:

override func scrollViewDidScroll(scrollView: UIScrollView) { 
     updateHeaderView() 
     var height: CGFloat 
     var position: CGFloat 
     var percent: CGFloat 

     height = scrollView.bounds.size.height/2 
     position = max(-scrollView.contentOffset.y, 0.0) 
     percent = min(position/height, 1.0) 
     self.headerBlurImageView.alpha = percent 
    } 
+0

self.view.alpha = ... – NorthBlast

+0

@NorthBlast уже делает это в состоянии else, но переход не является гладким :( – cyril

+0

использовать анимацию UIView .. – NorthBlast

ответ

2

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

0

Макет два UIImageViews друг над другом (в этом примере bg находится под bgB), а затем разметьте UIScrollview на самом верху. В методе scrollviewDidScroll поместите следующий код:

 float off = cv.contentOffset.x; 
    float floatedIndex = off/cv.frame.size.width; 
    int left = floatedIndex; 
    int right = ceil(floatedIndex); 
    if (right>events.count-1){ right=events.count-1; } 
    float alpha = floatedIndex-left; 

    UIImage * leftImage = nil; 
    UIImage * rightImage = nil; 
    NSDictionary * ld = events[left]; 
    NSDictionary * rd = events[right]; 
    NSObject * o = ld[@"artwork"]; 
    if ([o isKindOfClass:[UIImage class]]){ 
    leftImage = ld[@"artwork"]; 
    } 
    o = rd[@"artwork"]; 
    if ([o isKindOfClass:[UIImage class]]){ 
    rightImage = rd[@"artwork"]; 
    } 

    bg.image = leftImage; 
    bgB.image = rightImage; 
    bgB.alpha = alpha; 

«левых» и «правых» Интс соответствуют индексам в массиве. Есть строка, проверяющая, что scrollview не может случайно «слишком далеко править», т. Е. Пытается найти индекс за пределами массива.

Затем я извлекаю данные из массива, называемого событиями, и проверяю наличие изображения в результирующем словаре (но вы можете использовать его для прямого массива изображений), обновляя оба изображения UIImageview, а затем исчезая один сверху (bgB) в зависимости от смещения содержимого прокрутки.

«Анимация» коррелирует с пользовательским взаимодействием, что отлично, но иногда лучше использовать блоки анимации с другим методом делегирования scrollview.

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