12

私は自分のソリューションの1つにiCarouselを使用しようとしていました.下の画像のようなものを達成する必要があります.ここに画像の説明を入力

まさにその通りのはず

iCarouselOptionFadeMin iCarouselOptionFadeMax iCarouselOptionFadeRange iCarouselOptionFadeMinAlphaを使用して動作します

- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value

まったく同じ関数を作成しようとしました

- (CGFloat)alphaForItemWithOffset:(CGFloat)offset

値を使用して実行できることを発見しましたが、うまくいきoffsetません。これを達成するのを手伝ってくれる人はいますか?

ありがとう。

4

3 に答える 3

0

コメントするには十分な評判がないので、返信としてさらに質問する必要があります:(

@burax双曲線ではなく直線上にアイテムをレイアウトすることは可能ですが、サイズ変更は維持できますか?

よろしく、このような質問をして申し訳ありません

編集:これで達成したランダムな試行で:

- (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform
{
const CGFloat radius = [self carousel:carousel valueForOption:iCarouselOptionRadius withDefault:5050.0];
const CGFloat offsetFactor = [self carousel:carousel valueForOption:iCarouselOptionSpacing withDefault:0.8f]*carousel.itemWidth;
const CGFloat angle = offset*offsetFactor/radius;

//... the faster they shrink
const CGFloat shrinkFactor = 2.0f;
//hyperbola (now only for shrinking purposes)
CGFloat f = sqrtf(offset*offset+1)-1;


transform = CATransform3DTranslate(transform, radius*sinf(angle), radius*(1-cosf(angle)), 0.0);
transform = CATransform3DRotate(transform, angle, 0, 0, 1);
transform = CATransform3DScale(transform, 1/(f*shrinkFactor+1.0f), 1/(f*shrinkFactor+1.0f), 1.0);
return transform;
}

おそらくもっと良い方法がありますが、私は変換が初めてです:)

于 2015-07-09T20:14:24.943 に答える