如何UITableViewCell在表格视图中使用s 内的自动布局,让每个单元格的内容和子视图确定行高(本身/自动),同时保持平滑的滚动性能?
Apple 关于在视图和其中一个布局指南之间创建自动布局约束的文档仅显示了使用VFL的示例.
有没有办法在没有 VFL(使用NSLayoutConstraint其他API或类似的)的情况下以编程方式创建这些约束?
(注意:我特别要求在代码中执行此操作,而不是在Interface Builder中.我不希望length将指南集的计算设置为约束的静态常量,我想要一个约束,其中布局指南的长度发生变化会自动导致约束视图调整位置.)
UIView的内容抗压性和内容拥抱是什么?这些与视图的内在内容大小有何关系?
我现在试图隐藏iOS 4.3中的状态栏,现在setStatusBarHidden:animated:已弃用:
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]; //deprecated
Run Code Online (Sandbox Code Playgroud)
plist文件中唯一存在的选项是:状态栏最初是隐藏的.这只会隐藏应用程序开头的状态栏.
干杯
我正在为iOS制作一款相当简单的2D塔防游戏.
到目前为止,我一直在使用Core Graphics专门处理渲染.应用程序中根本没有图像文件(尚未).我一直在经历一些相对简单的绘图时出现的重大性能问题,我正在寻找关于如何解决这个问题的想法,而不是转向OpenGL.
在高层次上,我有一个Board类,它是UIView代表游戏板的子类.游戏中的所有其他对象(塔,小兵,武器,爆炸等)也是子类UIView,并在创建时作为子视图添加到棋盘中.
我将游戏状态与对象中的视图属性完全分开,并且每个对象的状态在主游戏循环中更新(由NSTimer60-240 Hz 激发,具体取决于游戏速度设置).游戏完全可玩,无需绘制,更新或动画视图.
我使用CADisplayLink本机刷新率(60 Hz)的计时器处理视图更新,该计时器调用setNeedsDisplay需要根据游戏状态的变化更新其视图属性的板对象.电路板上的所有对象都覆盖drawRect:在其框架内绘制一些非常简单的2D形状.因此,例如,当一个武器被动画化时,它将根据武器的新状态重绘自己.
在iPhone 5上测试,在电路板上总共有大约24个游戏对象,帧速率显着下降到60 FPS(目标帧速率),通常在10-20 FPS范围内.随着屏幕上的更多动作,它从这里走下坡路.在iPhone 4上,情况更糟.
使用Instruments我已经确定只有大约5%的CPU时间用于实际更新游戏状态 - 其中绝大部分是用于渲染.具体来说,CGContextDrawPath函数(根据我的理解是矢量路径的光栅化完成的地方)占用了大量的CPU时间.有关详细信息,请参阅底部的"仪器"屏幕截图.
从对StackOverflow和其他网站的一些研究来看,似乎Core Graphics不能满足我的需求.显然,抚摸矢量路径非常昂贵(尤其是在绘制不透明且具有某些alpha值<1.0的东西时).我几乎可以肯定OpenGL可以解决我的问题,但它的水平相当低,而且我不是很高兴不得不使用它 - 看起来它不应该是我在这里所做的事情.
是否有任何优化我应该考虑尝试从Core Graphics获得平滑的60 FPS?
有人建议我考虑将所有对象都绘制成单个CALayer而不是单独使用每个对象CALayer,但我不相信这会有助于根据Instruments展示的内容.
就个人而言,我有一个理论,即使用CGAffineTransforms我的动画(即,drawRect:一次绘制对象的形状,然后转换以在后续帧中移动/旋转/调整其图层大小)将解决我的问题,因为这些直接基于OpenGL的.但我不认为这样做比直接使用OpenGL更容易.
为了让你感受到我正在做的绘画水平,这里是我的一个drawRect:武器对象(从塔发射的"光束")的实现示例.
注意:此光束可以"重新定位"并穿过整个电路板,因此为简单起见,其框架尺寸与电路板尺寸相同.但是,电路板上的大多数其他对象的框架设置为最小的外接矩形.
- (void)drawRect:(CGRect)rect
{
CGContextRef c = UIGraphicsGetCurrentContext();
// Draw beam
CGContextSetStrokeColorWithColor(c, [UIColor greenColor].CGColor);
CGContextSetLineWidth(c, self.width);
CGContextMoveToPoint(c, self.origin.x, self.origin.y);
CGPoint vector = [TDBoard …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个简单的git repo来说明我的问题,可以在GitHub上找到:https://github.com/smileyborg/EvilMerge
这是回购历史的例证:
master A---B---D---E-----G-----I
\ / \ /
another_branch ----C \ /
\ /
another_branch2 F---H
Run Code Online (Sandbox Code Playgroud)
(在GitHub上的实际回购中,D是4a48c9,I是48349d.)
D是一个"简单"的邪恶合并,其中合并提交"正确"解决了合并冲突,但也产生了一个不相关的"邪恶"变化,这两个变化在父系统中都不存在.通过git show -c在此提交上使用,可以发现此合并的"邪恶"部分,因为输出包括++和--(而不是单个+和-)以指示父级中不存在的更改(请参阅上下文的答案).
I一种别样邪恶的合并,其中合并提交"正确"的解决合并冲突(从变化所引起F,以file.txt与变化相冲突G),也有"邪恶"丢弃到一个完全不同的文件中所做的更改file2.txt(有效撤消变化H).
你怎么知道这I是一个邪恶的合并?换句话说,您可以使用哪些命令来发现I不仅手动解决冲突,而且还无法合并应该具有的更改?
正如下面的RenéLink所指出的那样,很难(或许不可能)定义一套通用标准来识别"邪恶合并".然而,就像最高法院大法官斯图尔特所说的关于色情内容一样,当你看到邪恶的合并是你所知道的.
因此,或许更好的问题是:在合并提交中可以使用什么git命令来获得仅在合并提交本身中引入的所有新颖更改的diff输出.这种差异应包括:
D)I)这里的目标是能够让人类看看这个输出并知道合并是否成功或(意外或恶意)"邪恶",而 …
我正在使用estimatedRowHeightiOS 7中UITableView 的方法,它非常适合快速加载具有5000行可变高度的UITableView.
我的UITableView由50个部分组成.每个部分有100行,高度可变.在开始时我estimatedRowHeight用于快速加载,但在我调用之后scrollToRowAtIndexPath,我的UITableView滚动到错误的偏移量.我可以理解为什么会这样,因为它有一个estimatedRowHeight直到我滚动整个表并且在heightForRowAtIndexPath委托方法中设置了正确的单元格高度.
有解决方案吗
我正在开发构建iOS 6应用程序.
我有一个类TDBeam,它继承自超类TDWeapon.
超类TDWeapon在TDWeapon.h文件中声明了@property:
@interface TDWeapon : UIView
@property (nonatomic) int damage;
@end
Run Code Online (Sandbox Code Playgroud)
我没有明确地@synthesize属性,因为我让Xcode自动这样做.
在子类TDBeam中,我覆盖了TDBeam.m文件中的getter:
#import "TDBeam.h"
@implementation TDBeam
- (int)damage {
return _damage;
}
@end
Run Code Online (Sandbox Code Playgroud)
Xcode按预期自动完成getter方法名称.但是当我尝试引用_damage实例变量(继承自超类)时,我收到编译器错误:
Use of undeclared identifier '_damage'
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我已经尝试显式添加@synthesize,并更改_damage ivar的名称,但编译器不会"看到"它或来自超类的任何其他ivars.我认为ivars是可见的,可以从子类访问?
使用该weakSelf/strongSelf模式避免在块中创建保留周期,此代码非常常见:
typeof(self) __weak weakSelf = self;
void (^block)() = ^{
typeof(weakSelf) strongSelf = weakSelf;
// ...more code...
};
Run Code Online (Sandbox Code Playgroud)
的问题是,不改变第二typeof(weakSelf)到typeof(self)导致self在块被捕获?
例如:
typeof(self) __weak weakSelf = self;
void (^block)() = ^{
typeof(self) strongSelf = weakSelf; // does using typeof(self) here end up capturing self?
// ...more code...
};
Run Code Online (Sandbox Code Playgroud)
如果没有捕捉到自我,是否有任何理由偏爱这种或那种方式?
如果第三方应用程序以iOS为背景(仍在内存中)并且用户从App Store更新应用程序,应用程序是否会在安装过程之前或期间终止?升级后有没有办法让后台应用程序保留在内存中?application:didFinishLaunchingWithOptions:在更新后打开时,应用程序是否始终会收到回调?
(我的假设是应用程序被杀死并完全从内存中删除,因为应用程序的可执行代码在更新期间可能已更改.)
ios ×7
autolayout ×3
iphone ×3
objective-c ×2
uitableview ×2
cocoa-touch ×1
git ×1
git-merge ×1
ios7 ×1
ipad ×1
nsautolayout ×1
performance ×1
properties ×1
quartz-2d ×1
row-height ×1
statusbar ×1
uiview ×1