2012-06-15 2 views
1

Я использую карусель Ник Локвуд и тип - Карусель для колес. Я использую изображения как элементы в карусели. Проблема в том, что когда я поворачиваю карусель, изображение также вращается, то есть рассматривает изображение человека, тогда изображение человека наклонено, чего я не хочу, т. Е. Я не хочу вращать этот конкретный образ при вращении всей карусели. Кто-нибудь может помочь?Не хотите поворачивать изображение в карусели во вращающейся карусели

+0

Вы хотите сказать, что лицо человека всегда остается вертикальным? – sergio

+0

Да лицо лица должно оставаться вертикальным –

ответ

0

Попытка условно поворота изображения в зависимости от ориентации устройства в методе делегата

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view; 

.

+0

Я не вращающееся устройство, карусель только должен вращаться, но изображения внутри него должны оставаться такими, какие они есть, их место должно только меняться –

1

Посмотрите на файл iCarousel.m и найдите метод - (CATransform3D)transformForItemView:(UIView *)view withOffset:(CGFloat)offset; Внутри него вы найдете этот блок:

case iCarouselTypeWheel: 
    case iCarouselTypeInvertedWheel: 
    { 
     NSInteger count = [self valueForTransformOption:iCarouselTranformOptionCount withDefault: 
          MIN(numberOfVisibleItems, numberOfItems + numberOfPlaceholdersToShow)]; 

     CGFloat arc = [self valueForTransformOption:iCarouselTranformOptionArc withDefault:M_PI * 2.0f]; 
     CGFloat radius = [self valueForTransformOption:iCarouselTranformOptionRadius withDefault:itemWidth * (CGFloat)count/arc]; 
     CGFloat angle = [self valueForTransformOption:iCarouselTranformOptionAngle withDefault:arc/(CGFloat)count]; 

     if (type == iCarouselTypeInvertedWheel) 
     { 
      radius = -radius; 
      angle = -angle; 
     } 

     if (vertical) 
     { 
      transform = CATransform3DTranslate(transform, -radius, 0.0f, 0.0f); 
/* this */  transform = CATransform3DRotate(transform, angle * offset, 0.0f, 0.0f, 1.0f); 
      return CATransform3DTranslate(transform, radius, 0.0f, offset * 0.01f); 
     } 
     else 
     { 
      transform = CATransform3DTranslate(transform, 0.0f, radius, 0.0f); 
    /* this */ transform = CATransform3DRotate(transform, angle * offset, 0.0f, 0.0f, 1.0f); 
      return CATransform3DTranslate(transform, 0.0f, -radius, offset * 0.01f); 
     } 
    } 

Try просто закомментировать две строки:

 transform = CATransform3DRotate(transform, angle * offset, 0.0f, 0.0f, 1.0f); 

и посмотреть, что происходит; Я думаю, что лицо не будет повернуто, но тогда вам может понадобиться отрегулировать перевод ...

+0

Спасибо за ответ, я стараюсь только для этого, но все еще не нашли решения, я пытаюсь и опубликую, если найду его, если кто-нибудь еще найдет это, то, пожалуйста, помогите –

4

Посмотрите в порядке внедрения - (CATransform3D)transformForItemView:(UIView *)view withOffset:(CGFloat)offset; Найти case iCarouselTypeWheel: и case iCarouselTypeInvertedWheel: блок.

Изменить код, который генерирует конечные преобразования (для обеих вертикальных и горизонтальных случаев) в обратном применяется вращение:

transform = CATransform3DTranslate(transform, 0.0f, radius, 0.0f); 
transform = CATransform3DRotate(transform, angle * offset, 0.0f, 0.0f, 1.0f); 

// this is the transform the existing code returns... 
transform = CATransform3DTranslate(transform, 0.0f, -radius, offset * 0.01f); 

// instead you reverse the rotation before returning... 
return CATransform3DRotate(transform, -(angle * offset), 0.0f, 0.0f, 1.0f); 

Я надеюсь, что помогает.

+0

Это определенно помогло! Спасибо, что опубликовали это :). – kajham

+0

Помог мне, это должно быть подтверждено. – darksider

+0

Спасибо, что вы спасли мою жизнь :) – iphonic

0

Используя код из приведенных выше ответов, я не смог исправить эту проблему. Я повторно использовал часть комментариев, но не код. Это сработало для меня.

 if (_vertical) 
     { 
      transform = CATransform3DTranslate(transform, -radius, 0.0, 0.0); 
      transform = CATransform3DRotate(transform, angle * offset, 0.0, 0.0, 1.0); 
      transform = CATransform3DTranslate(transform, radius, 0.0, offset * 0.01); 
      return CATransform3DRotate(transform, -(angle * offset), 0.0, 0.0, 1.0); 
     } 
     else 
     { 
      transform = CATransform3DTranslate(transform, 0.0, radius, 0.0); 
      transform = CATransform3DRotate(transform, angle * offset, 0.0, 0.0, 1.0); 
      transform = CATransform3DTranslate(transform, 0.0, -radius, offset * 0.01); 
      return CATransform3DRotate(transform, -(angle * offset), 0.0, 0.0, 1.0); 
     } 
Смежные вопросы