首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从屏幕顶部更改CALayer frame origin.y

如何从屏幕顶部更改CALayer frame origin.y
EN

Stack Overflow用户
提问于 2020-11-06 16:52:45
回答 3查看 141关注 0票数 1

我有MacOS应用程序,当我设置frame的origin.y时,我的视图从底部启动。在iOS应用中,origin.y将从顶部开始。我怎样才能改变它。

我在ViewDidLoad和ViewWillAppear中尝试了下面的代码(Suggested by Mark),但是没有成功。

代码语言:javascript
复制
self.view.layer?.sublayerTransform = CATransform3DMakeScale(1.0, -1.0, 1.0)
EN

回答 3

Stack Overflow用户

发布于 2020-11-06 17:06:45

坐标系在MacOS和iOS中具有不同的绘图方向:https://developer.apple.com/library/archive/documentation/General/Devpedia-CocoaApp-MOSX/CoordinateSystem.html

在使用CATransform3DMakeScale通过y坐标“翻转”系统之后,必须使用CATransform3DMakeTranslation将其“转换回来”。

Smth喜欢:

代码语言:javascript
复制
CATransform3D t = CATransform3DMakeScale(1.0, -1.0, 1.0);
t = CATransform3DTranslate(0,layerHeight, 0); // or -layerHeight, you should test 
self.view.layer?.sublayerTransform = t;
票数 0
EN

Stack Overflow用户

发布于 2020-11-06 17:34:03

查看CALayerisGeometryFlipped属性,该属性控制y = 0位于屏幕的顶部还是底部。

票数 0
EN

Stack Overflow用户

发布于 2020-11-11 20:33:21

实现方法-(BOOL)isFlipped以覆盖macOS NSView类中的本机坐标系。

代码语言:javascript
复制
- (BOOL)isFlipped {
    return YES;
}

这应该围绕特定视图中的所有坐标进行翻转。

根据NSView/ to视图,CALayer的行为将有所不同。

但也有一种方法可以翻转单个CALayer。您的CALayer应该有一个可以设置的属性(BOOL)geometryFlipped

代码语言:javascript
复制
CALayer *yourlayer = [CALayer layer];
yourlayer.geometryFlipped = YES;

或者创建CALayer的子类并实现

代码语言:javascript
复制
-(BOOL)contentsAreFlipped {
    return YES;
}

用"Flipp“表示的是y坐标。X坐标应该保持不变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64711484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档