1

I am using Nick Lockwood carousel and type is Wheel Carousel. I am using the images as items in carousel. The problem is when I rotate the carousel the image also rotates, i.e. consider a person image, then the person image gets tilted, which I don't want, i.e. I don't want to rotate that particular image while rotating whole carousel. Can anyone please help?

4

4 に答える 4

4

andブロックの- (CATransform3D)transformForItemView:(UIView *)view withOffset:(CGFloat)offset;Findの実装を見てください。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);

それが役立つことを願っています。

于 2012-07-24T14:18:08.647 に答える
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);
        }
    }

次の 2 行をコメントアウトしてみてください。

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

そして何が起こるか見てください。顔は回転しないと思いますが、移動を調整する必要があるかもしれません...

于 2012-06-15T13:57:21.067 に答える
0

デバイスの向きに応じて、画像を条件付きで回転させてみてください。

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

デリゲート メソッド。

于 2012-06-15T13:39:05.573 に答える
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);
        }
于 2017-07-31T17:08:44.803 に答える