gpt4 book ai didi

ios - Mac Dock 类似 iPad 的放大

转载 作者:可可西里 更新时间:2023-11-01 04:14:03 29 4
gpt4 key购买 nike

我正在尝试通过 iCarousel 库为我的 iPad 应用程序带来类似于放大效果的停靠栏。这样我就可以使用以下代码放大旋转木马的中心项目,但尝试使用比中心项目小一点的缩放级别来缩放中心项目的相邻项目。

- (CATransform3D)carousel:(iCarousel *)_carousel itemTransformForOffset: 
:(CGFloat)offset baseTransform:(CATransform3D)transform
{
CGFloat MAX_SCALE = 1.95f; //max scale of center item
CGFloat MAX_SHIFT = 40.0f; //amount to shift items to keep spacing the same

CGFloat shift = fminf(1.0f, fmaxf(-1.0f, offset));
CGFloat scale = 1.0f + (1.0f - fabs(shift)) * (MAX_SCALE - 1.0f);
transform = CATransform3DTranslate(transform,
offset * _carousel.itemWidth * 1.08f + shift * MAX_SHIFT, 0.0f, 0.0f);
return CATransform3DScale(transform, scale, scale, scale);
}

期待任何形式的帮助。谢谢。

最佳答案

这个函数可能就是你的答案:

enter image description here

它的图表(对于 scaleMax = 3,xFactor = 1):

enter image description here

此函数直接用于计算旋转木马偏移量的比例因子。此外,您需要将元素向左和向右移动,以免重叠(就像您已经做的那样)。这可以通过将项目移动函数的积分来完成,这是有效的,但中心的差距是巨大的。或者可以通过对所有缩放项目求和来手动计算。差距可以保持不变,也可以单独缩放。

请注意,比例在中心等于 1,在边缘下降到 1/scale_max。这是因为缩小不会产生不良的像素化效果。使您的项目 View 显示在中心,边缘的 View 将按比例缩小。

这可能是用法:

-(CGFloat) scaleForX:(CGFloat)x xFactor:(CGFloat)xFactor centerScale:(CGFloat)centerScale
{
return (1+1/(sqrtf(x*x*x*x*xFactor*xFactor*xFactor*xFactor+1))*(centerScale-1.0))/centerScale;
}

- (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform
{
//items in the center are scaled by this factor
const CGFloat centerScale = 4.0f;
//the larger the xFactor, the smaller the magnified area
const CGFloat xFactor = 1.5f;
//should the gap also be scaled? or keep it constant.
const BOOL scaleGap = NO;

const CGFloat spacing = [self carousel:carousel valueForOption:iCarouselOptionSpacing withDefault:1.025];
const CGFloat gap = scaleGap?0.0:spacing-1.0;

//counting x offset to keep a constant gap
CGFloat scaleOffset = 0.0;
float x = fabs(offset);
for(;x >= 0.0; x-=1.0)
{
scaleOffset+=[self scaleForX:x xFactor:xFactor centerScale:centerScale];
scaleOffset+= ((x>=1.0)?gap:x*gap);
}
scaleOffset -= [self scaleForX:offset xFactor:xFactor centerScale:centerScale]/2.0;
scaleOffset += (x+0.5)*[self scaleForX:(x+(x>-0.5?0.0:1.0)) xFactor:xFactor centerScale:centerScale];
scaleOffset *= offset<0.0?-1.0:1.0;
scaleOffset *= scaleGap?spacing:1.0;

CGFloat scale = [self scaleForX:offset xFactor:xFactor centerScale:centerScale];
transform = CATransform3DTranslate(transform, scaleOffset*carousel.itemWidth, 0.0, 0.0);
transform = CATransform3DScale(transform, scale, scale, 1.0);
return transform;
}

结果: enter image description here

您可以尝试针对不同的行为更改常量。此外,将指数更改为另一个偶数可以进一步加宽峰值并使下降更锐利到最小尺度。

关于ios - Mac Dock 类似 iPad 的放大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19178267/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com