- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试通过 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);
}
期待任何形式的帮助。谢谢。
最佳答案
这个函数可能就是你的答案:
它的图表(对于 scaleMax = 3,xFactor = 1):
此函数直接用于计算旋转木马偏移量的比例因子。此外,您需要将元素向左和向右移动,以免重叠(就像您已经做的那样)。这可以通过将项目移动函数的积分来完成,这是有效的,但中心的差距是巨大的。或者可以通过对所有缩放项目求和来手动计算。差距可以保持不变,也可以单独缩放。
请注意,比例在中心等于 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;
}
结果:
您可以尝试针对不同的行为更改常量。此外,将指数更改为另一个偶数可以进一步加宽峰值并使下降更锐利到最小尺度。
关于ios - Mac Dock 类似 iPad 的放大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19178267/
我制作了一个可以更改 OSX 垃圾箱图标的应用程序。但是,在替换 .../CoreServices/Dock.app/Resources 中的图标 .png 文件后,在垃圾桶更改状态(fx.empty
有什么方法可以检测用户何时将鼠标悬停在停靠栏上的任何图标上吗?此外,是否有任何方法可以检测用户何时单击了 Dock 上的任何图标? 必须有一种检测悬停的方法,因为 hyperdock 和 dockvi
我正在使用delphi xe2 with update 4,操作系统为Win7,我想为我的学期考试构建一个允许对接表单的应用程序。因为我是一名学生,所以我买不起任何对接组件。因此,我开始通过查看 JV
如果您在表单上创建一个面板并将其设置为 Dock=Top,然后放下另一个面板并设置其 Dock=Fill,它可能会填满整个表单,而忽略第一个面板。更改 Tab 键顺序没有任何作用。 最佳答案 停靠布局
我正在尝试在 Dock 中为我的 swift 应用程序创建一个自定义的 Dock 菜单,这样当用户在我的应用程序启动后右键单击我的应用程序的 Dock 磁贴时,除了默认的 Dock 菜单项外,它还会显
我在 Delphi 7 中使用停靠 (VCL)。在我的主窗体中,停靠了另外两个窗体:一个垂直位于左边缘,一个水平位于底部边缘。 问题:停靠在底部边缘的表单占据了表单的整个宽度,限制了停靠在左边缘的表单
我遇到了一个有趣的问题。窗口漂浮在 NSScreenSaverWindowLevel 或类似级别的 Dock 上,如果您将鼠标悬停在该窗口上,即使 Dock 被窗口覆盖,Dock 仍会对鼠标使用rea
当 OS X 扩展坞显示时,它会“保留”一些屏幕区域,并防止最大化的窗口在最大化时移至扩展坞后面。如何让我自己的 Cocoa 应用程序执行相同的操作? 最佳答案 窗口的“最大化区域”基于屏幕的visi
我正在增加 NSWindow 的高度,但如果窗口位于屏幕下方太远,则窗口的高度会增加并延伸到 Dock 下方。我想防止这种情况发生。 当我研究这个时,我偶然发现了 this question这说明了相
我正在尝试创建一个按钮并使用布局管理器将按钮停靠到面板的右侧,但出现以下错误: Exception in thread "main" java.lang.IllegalArgumentExceptio
我有一个应用程序需要重新启动停靠应用程序。我已经用 Apple Script 尝试过这个: var errorDict: NSDictionary? = nil let appleScript = N
在 Windows 上,我正在尝试创建具有透明 DOCKWIDGETS 的 Qt 应用程序,其中 dock widget 的背景在 float 时是透明的。所以我们可以通过dock widget来查看
我正在使用 AvalonDock 2.0 作为选项卡控件管理器,但是我还没有找到允许多行选项卡(需要时)的方法,或者显示后台隐藏选项卡的方法。 多行tab可以通过模板或者样式实现吗?还是我错过了一些我
要删除 Dock 中的应用程序图标,我使用以下代码: ProcessSerialNumber psn = { 0, kCurrentProcess }; TransformProcessType(&p
我正在编写一个 Cocoa 应用程序,该应用程序需要在其 Dock 图标上接受已安装卷的滴落。它不是基于文档的;我打算将每个卷分派(dispatch)到 application:openFiles 中
几周前我为 Mac 创建了一个状态栏应用程序。但是,每当我运行该应用程序时,停靠栏图标都会与状态栏中的项目一起单独显示。有没有办法阻止应用程序出现在 Dock 中? 最佳答案 我无法写评论,但对于 @
当更改停靠位置时,Cocoa 会触发 NSApplicationDidChangeScreenParametersNotification: 问题在于Apple Docs ,仅在以下情况下才应引发 P
我的 Cocoa 应用程序支持将文件拖放到其 Dock 图标上,但我希望根据是否按住修饰键(Command、Option 等)来实现不同的行为。 我尝试检查 currentEvent 的 modifi
我正在浏览文档以查找如何允许放置在停靠栏图标上。据我所知,建议您使用 LSItemContentTypes,因为 CFBundleTypeOSTypes 已弃用。但是,我无法让 LSItemConte
我正在创建一个应用程序,我想让用户能够在运行时显示或隐藏停靠图标。我有一个带有复选框的首选项窗口,用于设置用户默认值,这会使用 KVO 触发以下代码: if (!hideDockIcon) {
我是一名优秀的程序员,十分优秀!