gpt4 book ai didi

ios - setNeeds显示困惑

转载 作者:行者123 更新时间:2023-12-01 17:56:56 24 4
gpt4 key购买 nike

我正在使用它来移动我的图像:

meteorDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(moveImage:)];

这是我的 moveImage:方法:
-(void) moveImage:(CADisplayLink *)sender{
CGPoint img;
imgLocation = imgImageView.center;
if (img < 100) {
img.y++;
}
else{
imgLocation.y = 0;
}
imgImageView.center = imgLocation;
}

无论如何,这都会更新我的图像在屏幕上的位置。为什么 setNeedsDisplay这里没有效果? setNeedsDisplay 的意义何在? ?

最佳答案

我假设 imgImageViewUIImageView 的一个实例.如果不是 UIImageView 的实例,编辑您的问题,告诉我们它是什么。

更改 center View 的属性从不要求您的应用重绘 View 。显示服务器(它是一个单独的进程,在 iOS 6 中名为 backboardd,在早期版本中名为 springboard)已经拥有 View 像素数据的副本。当您更改 View 的 center , View 只是通知显示服务器它的新位置,显示服务器将 View 的像素数据复制到屏幕的适当部分。

从而改变center View 的属性永远不需要您发送 setNeedsDisplay .

更具体地说,UIImageView甚至没有实现 drawRect: .相反,UIImageView当您设置其图像时,只需将其图像的像素数据发送到显示服务器。所以即使你发送setNeedsDisplayUIImageView ,它仍然不会运行任何drawRect:方法。

顺便说一句,您可以在自己的 UIView 中执行此操作子类也是,通过设置 self.layer.contentsCGImageRef而不是实现drawRect: .您将需要 #import <QuartzCore/QuartzCore.h>去做这个。当然,UIImageView也做其他事情,比如处理动画和可调整大小的图像。

关于ios - setNeeds显示困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15755097/

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