- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我的问题
我想用看起来像 Safari Pageviewer 的 CollectionViewFlowLayout 实现一个 CollectionView(见截图)
由于 Apple 引用了诸如“z-index”和“Transformations”之类的东西,因此很容易实现。经过几天的教程和研究后,我无法做到。
我遵循了一些普通的 CollectionViewFlowLayout 并使其成为 CollectionViewFlowLayout 的子类。现在我尝试了
-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect
-(void)modifyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
和
-(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
在我尝试为细胞提供 3D 变换时。
但是 layoutAttributesForItemAtIndex 从未被调用(找到了一些解释,但我并没有真正理解它)
尝试其他方法也无效(细胞上看不到 3D 转换。)
以下是我的尝试,您可以看到我的尝试:
//这个从未被调用过
-(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewLayoutAttributes *attributes =
[super layoutAttributesForItemAtIndexPath:indexPath];
[attributes setTransform3D:CATransform3DMakeTranslation(10.0, 20.0, 10.0)];
attributes.transform3D = CATransform3DMakeScale(1.0, 2.0, 1.0);
return attributes;
}
//这个被调用了,但是 Transformation 没有按预期工作。
-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect
{
NSArray *allAttributesInRect = [super
layoutAttributesForElementsInRect:rect];
for (UICollectionViewLayoutAttributes *cellAttributes in allAttributesInRect)
{
cellAttributes.size=CGSizeMake(300, 300);
cellAttributes.transform3D = CATransform3DMakeScale(1.0, 2.0, 1.0);
cellAttributes.transform3D = CATransform3DMakeTranslation(1, 200, 100);
[self modifyLayoutAttributes:cellAttributes];
}
return allAttributesInRect;
}
//这个也没用
-(void)modifyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
{
if ([layoutAttributes.indexPath isEqual:_currentCellPath])
{
Assign the new layout attributes
layoutAttributes.size = CGSizeMake(300, 300);
layoutAttributes.transform3D = CATransform3DMakeScale(_currentCellScale, _currentCellScale, 1.0);
layoutAttributes.center = _currentCellCenter;
}
}
这是我的问题:
有人知道如何实现类似 CollectionView 的“Coverflow”并且可以帮助我吗?
我是不是以错误的方式使用了 CollectionViewFlowLayout 的方法,还是以错误的方式使用了 CATransform3D?
谢谢
最佳答案
GitHub 项目 WKPagesCollectionView和 NFSafariTabs展示这是如何实现的。
UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
// rotation
CGFloat angleOfRotation = -61.0;
CATransform3D rotation = CATransform3DMakeRotation((M_PI*angleOfRotation/180.0f), 1.0, 0.0, 0.0);
// perspective
CGFloat depth = 300.0;
CATransform3D translateDown = CATransform3DMakeTranslation(0.0, 0.0, -depth);
CATransform3D translateUp = CATransform3DMakeTranslation(0.0, 0.0, depth);
CATransform3D scale = CATransform3DIdentity;
scale.m34 = -1.0f/1500.0;
CATransform3D perspective = CATransform3DConcat(CATransform3DConcat(translateDown, scale), translateUp);
// final transform
CATransform3D transform = CATransform3DConcat(rotation, perspective);
关于IOS 7 CollectionViewFlowLayout 3D Translation(像新的 Safari Tabviewer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20056035/
我在那个 tab view 里面有一个 tab view,在那个 tab view` 里面有另一个 tab view,还有一个警告框。当我尝试打开它时,我的应用程序被强制关闭。 但同样的 AlertD
在 SwiftUI 中,TabView 必须是 Root View 。因此,您不能使用 NavigationLink 导航到 TabView。比如说我的应用程序中有四个屏幕。 屏幕 A 是一个包含屏幕
我有这门课: class PageViewModel:ObservableObject { @Published var cars = [Car]() func delete(_ ca
有没有办法在 TabView 中禁用透明度为 iOS 15 ?如果我的 List没有填满整个屏幕 TabView背景是透明的,我希望始终显示 TabView背景。 最佳答案 感谢@Asperi 为我指
我目前在我的应用程序上面临 pb。我想为由 SwiftUI TabView 控制的项目的插入和删除设置动画。 这是我能想到的最简单的重现问题的 View struct ContentView: Vie
我有一个 TabView SwiftUI 中有两个标签生命周期应用,其中一个具有复杂的 View 结构:NavigationView里面有很多 subview ,即:NavigationLink s
我认为我错过了一些简单的东西,但我无法弄清楚它到底是什么。 我正在尝试使用 UITabViewController 设置一个应用程序,其中一个选项卡将具有 UITableView 和 UISearch
我正在使用 TabVIew,我有两个问题: 1.如何去除 TabView 标题的边框底部? 2. 如何在 TabView 标题中的项目之间添加分隔符? 谢谢, 陈 最佳答案 您既不能删除底部颜色,也不
我有一个简单的 TabView: TabView { NavigationView { VStack { NavigationLink(destinat
我创建了一个带有多个选项卡的应用程序,每个选项卡都有一个 webview。 我的网页 View : struct WebView : UIViewRepresentable { let req
我想创建一个 Activity,它在顶部有一个标题,在它下面有一个 TabHost。这是我的 XML 文件中的内容
我刚刚开始使用 Nativescript,所有这些工作给我留下了深刻的印象! 作为将 VueJS Web 应用程序迁移到移动设备的项目的一部分,我正在尝试使用 tabview 并理解这一点。我似乎无法
我在 TabView 类中有这段代码: package jungle.timer; import com.example.jungletimer.R; import android.os.Bundle
我想在运行时在 android 中单击该选项卡来更改选项卡 View 。 当我在“收藏夹”选项卡中单击时,此选项卡图像会自动像“主页”选项卡一样。 请帮助我。 像这样之前 之后 请举例... 提前致谢
我需要使用 java 代码在运行时创建选项卡 View 。 注意: 不使用 xml 设计 最佳答案 在 XML 中创建 TabHost、TabWidget,然后在运行时添加 TAbHost.TabSp
我正在尝试在操作栏中创建一个自定义选项卡 View ,如下所示: 我得到了这个观点: 我想改变 tabviews 指示器的背景,这样背景颜色就变得不可见,我们在选定的 tabview 指示器下有一条绿
我可以在工具栏中创建选项卡 View ,就像应用程序照片 (Yosemite) 一样吗?我只想要一个分段按钮,没有图像。我尝试将 TabView Controller 的样式设置为“工具栏”,但它也会
我想使用 PrimeFaces TabView 组件在选项卡中显示来 self 们服务器的数据。我需要三个选项卡来显示具有不同数据的三个表。 如果我这样写就可以了: // logic
我已经完全改变了我的代码。但是事件索引仍然显示出问题。有时它会被调用,有时它不会。 下面的 xhtml 代码有什么问题? Admin Panel
SwiftUI 中的 View 默认具有透明背景。这通常意味着它们具有白色背景,因为这是您应用的默认背景颜色。但是,这也意味着您可以使用 ZStack更改整个应用程序的背景颜色,除非您明确设置自己的背
我是一名优秀的程序员,十分优秀!