gpt4 book ai didi

iphone - 堆叠的 UIView 层不会移动

转载 作者:行者123 更新时间:2023-12-03 20:27:18 24 4
gpt4 key购买 nike

我正在开发一个 iPhone 应用程序,它根据加速度计在其他 UIView 层之间移动 UIView 层。

如果最顶层是根据加速度计移动的层,那么没问题。如果我在其上添加 UIView,则移动会严重延迟。如果我在其顶部添加第二个 UIView,移动就会停止。

updateInterval是60,我使用UIView的drawAtPoint:方法来移动图层。

我的问题:是否需要启用 UIView 属性(例如 opaque、clipsToBounds 等)才能实现夹层 UIView 的基于加速度计的精确移动?

预先感谢您提供的任何帮助。

更新:

底层是不透明的,上面的图层是透明的PNG。

我在访问 UIView 的框架属性时遇到困难。以下是我的 Object2D 类中的一些代码:

- (id)initWithImage:(NSString*)imageName
{
if (self = [super init])
{
position = [[Point2D alloc] init];
vector = [[Vector2D alloc] init];
imagePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];
myImageObj = [[UIImage alloc] initWithContentsOfFile:imagePath];
size.width = myImageObj.size.width;
size.height = myImageObj.size.height;
}

return self;
}

这是从 ViewController 类调用的类的原始 draw: 方法:

- (void)draw
{
[myImageObj drawAtPoint:CGPointMake( position.X, position.Y ) ];
[ self setNeedsDisplay ];
}

我尝试了各种方法来访问框架属性,但无济于事:

myImageObj.frame = CGRectMake(position.X, position.Y, size.width, size.height);
myImageObj.CGImage.frame.y = position.Y;

查看 API 文档表明第一种方法可行,但事实并非如此。

你知道如何访问UIView的frame属性吗?

提前致谢。

最佳答案

您无法直接设置各个框架参数。您必须创建一个新的 CGRect 并将框架设置为该 CGRect。创建 CGRect 后,有多种方法可以更改它的参数。

CGRect myNewFrame = someView.frame;

myNewFrame.origin.x = 1.0;

myNewFrame.size = CGSizeMake(100.0f, 50.0f);

someView.frame = myNewFrame;

这个想法是按照您想要的方式设置 CGRect,然后将 View 的框架属性设置为该 CGRect,然后就可以了。

就 UIView 而言...您可能会遇到一些问题。首先,如上所述,drawAtPoint 方法的成本很高。其次,也许更糟糕的是,您有几个透明图像。透明度是 iPhone 上最昂贵的操作之一,事实上,Instruments 中专门为此进行了测试。您应该不惜一切代价避免透明度。一些在旋转过程中全部重绘的透明 PNG 很可能会给您的应用带来问题。

我的下一个建议是考虑是否需要在透明胶片中间放置 View ,也许另一层可以完成这项工作。如果需要触摸功能,可以使用图层层次结构根部的 View 来处理触摸。换句话说,从后到前你有:
用户界面 View CAL层用户界面 View CAL层CAL层

但是你可以这样:UIView(现在处理所有触摸)CAL层CALayer(以前的 View )CAL层CAL层

这也将有所帮助,因为 CALayers 的开销比 UIView 更少。

希望这有帮助。

关于iphone - 堆叠的 UIView 层不会移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/452057/

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