我一直在做这样的事情来模仿旧版iOS上的键盘动画.
CGRect keyboardBeginFrame;
[[note.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] getValue:&keyboardBeginFrame];
self.doneKeyboardButton.frame = CGRectMake(0, (keyboardBeginFrame.origin.y + keyboardBeginFrame.size.height) - 53, 106, 53);
[[[[UIApplication sharedApplication] windows] lastObject] addSubview:self.doneKeyboardButton];
CGPoint newCenter = CGPointMake(self.doneKeyboardButton.superview.frame.origin.x + self.doneKeyboardButton.frame.size.width/2,
self.doneKeyboardButton.superview.frame.size.height - self.doneKeyboardButton.frame.size.height/2);
[UIView animateWithDuration:[[note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]-.02
delay:.0
options:[[note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]
animations:^{
self.contentView.frame = CGRectOffset(self.contentView.frame, 0, -TextFieldViewMovement);
self.doneKeyboardButton.center = newCenter;
}
completion:nil];
Run Code Online (Sandbox Code Playgroud)
但是,这已停止在iOS7上运行.看起来返回的值不再完全正确,完成按钮不再完全模仿键盘显示动画.
我知道我可以这样做:
NSMutableArray *objects = [@[objectOne, objectTwo] mutableCopy];
NSObject *someObject = [NSObject new];
objects[0] = someObject;
Run Code Online (Sandbox Code Playgroud)
但有没有办法让新的文字语法模仿addObject:?
任何人都可以详细解释为什么iOS在框架和转换方面处理它的横向方向吗?
我所说的是通过在各种View Lifecycle方法中记录视图描述来显示以下行为:
viewDidLoad: "UIView: 0x1edb5ba0; frame = (0 0; 568 320); autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
viewWillAppear: "UIView: 0x1edb5ba0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
viewDidAppear: "UIView: 0x1edb5ba0; frame = (0 0; 320 568); transform = [0, 1, -1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x1edb5c50>"
Run Code Online (Sandbox Code Playgroud)
这种影响是微妙的,但非常有趣.
例如,我使用Initial Interface Orientation启动我的应用程序,并将Supported Interface Orientations设置为"Landscape(右主页按钮)"
然后我显示我的rootViewController,如下所示:
self.viewController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
self.window.rootViewController = self.viewController;
Run Code Online (Sandbox Code Playgroud)
这个.xib的方向设置为Landscape,它的框架设置为0,0,568,320.它显示正确,我可以触摸屏幕上的所有点.
当我提出这样的子视图时,问题就出现了:
SomeView *someView = …
Run Code Online (Sandbox Code Playgroud) 我有一个有趣的问题,我需要研究与非常低级别的视频流.
有没有人有过将原始字节流(分成每像素信息,但不是标准格式的视频)转换为低分辨率视频流的经验?我相信我可以将数据映射到每像素字节的RGB值,因为与原始数据中的值对应的颜色值将由我们确定.我不知道从那里去哪里,或者每个像素需要RGB格式.
我看过FFMPeg,但它的文档很大,我不知道从哪里开始.
我所包含的具体问题是,是否可以使用该像素数据创建CVPixelBuffer?如果我这样做,我需要转换为每像素数据的格式是什么?
另外,我是否应该更深入地研究OpenGL,如果是这样,哪里可以找到有关此主题的信息的最佳位置?
那么CGBitmapContextCreate呢?例如,如果我去了,我就是这样的,一个典型的像素字节需要看起来像什么?这是否足够快以保持帧速率高于20fps?
编辑:
我认为在你们的帮助下,以及我自己的一些研究,我已经制定了一个如何构建原始RGBA数据的计划,然后根据该数据构建CGImage,从而创建一个来自CGImage的CVPixelBuffer来自CGImage的CVPixelBuffer.
然而,为了在数据进入时播放,我不确定我会看到什么样的FPS.我是否将它们绘制到CALayer,或者是否有类似AVAssetWriter的类,我可以使用它来添加CVPixelBuffers.我的经验是使用AVAssetWriter将构建的CoreAnimation层次结构导出到视频,因此视频总是在开始播放之前构建,而不是显示为实时视频.
我的NSFetchedResultsController有问题,似乎是通过打开IncludesPendingChanges来解决的,这让我很担心.(我发现这不是真的,包括未决的更改也无济于事.)
会发生什么是我的Fetched Results Controller在完整的API刷新时正确地获取并显示我的对象.单步执行,我已经确认这个完整的API刷新的临时上下文被保存并合并而没有错误.
但是,如果我返回到从不同导航流执行相同获取请求的视图,则只返回并显示一个部分完成的对象,而不是完整的对象集.如果我此时执行完整的API刷新,则刷新将显示正确的对象.
我相信我的问题可能是mergeChangesFromContextDidSaveNotification没有传播到主上下文,但从我的日志和单步执行,在我看来,它正在保存正确.我不知道从哪里开始.虽然IncludesPendingChanges修复了症状,但我不认为它解决了潜在的问题.
作为一些补充信息,我将这个框架用于我的核心数据管理:https://github.com/vokalinteractive/CoreDataManager-iOS
我通过在VIFetchedResultsController.m的第156行添加来启用includesPendingChanges
[fetchRequest setIncludesPendingChanges:YES]
Run Code Online (Sandbox Code Playgroud)
编辑无论侥幸让我相信includePendingChanges为YES修复问题不再存在.事实证明,这个项目有一些严重的内存管理,并且花了一整天的时间来清理它,我仍然没有接近这个工作.尽管如此,它看起来似乎没有传播到主数据存储区,或者没有坚持下去.
作为一个提示,就像我在下面的评论中提到的,即使我指定"includePendingChanges:YES",也可以使用以下命令记录我提取的对象:
[self.fetchedResultsController.fetchedObjects description]
Run Code Online (Sandbox Code Playgroud)
以"includesPendingChanges:NO"结尾.知道是什么原因引起的吗?
在iOS 6上,这段代码工作正常:
- (NSString*)cLocalImageName
{
[self willAccessValueForKey:@"cLocalImageName"];
NSString*pathToImage;
if ([self.cIsUserCreated boolValue]) {
pathToImage = [self primitiveValueForKey:@"cLocalImageName"];
}else{
pathToImage = [[NSBundle mainBundle] pathForResource:[self primitiveValueForKey:@"cLocalImageName"] ofType:@".png"];
}
[self didAccessValueForKey:@"cLocalImageName"];
return pathToImage;
}
Run Code Online (Sandbox Code Playgroud)
即此行始终返回正确的文件路径:
pathToImage = [[NSBundle mainBundle] pathForResource:[self primitiveValueForKey:@"cLocalImageName"] ofType:@".png"];
Run Code Online (Sandbox Code Playgroud)
但是,在iOS 5上,该行总是返回nil,而我必须调用:
pathToImage = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",[self primitiveValueForKey:@"cLocalImageName"]]];
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我为什么这是iOS 5上的问题?
我已经排除的事情:
•[self primitiveValueForKey:@"cLocalImageName"]未返回nil.
•构建应用程序后,.png对象实际上存在于已编译的.app包中.
今晚我们遇到了一个恼人的问题,只能在Xcode的命令行构建中出现,而不是来自Xcode的GUI.
当从具有Xcode GUI的机器构建时,使用$ PROJROOT的递归用户头搜索路径,没有双引号,我们没有遇到任何问题.但是,当使用使用Xcode命令行构建功能的Jenkins进行构建时,会抛出Headers不可用的错误.
经过一个小时的探索,有人决定尝试用双引号包装反复的$ PROJROOT("$ PROJROOT").一旦发生这种情况,Jenkins命令行的建设终于成功了.
所以我们并不完全理解用引号包装搜索路径或省略引号的后果.
任何人都可以了解究竟是什么导致了这个问题?什么双引号从命令行对GUI表示编译器?
ios ×6
objective-c ×3
animation ×1
core-data ×1
core-video ×1
encoding ×1
frame ×1
jenkins ×1
keyboard ×1
landscape ×1
nsarray ×1
nsbundle ×1
opengl-es ×1
orientation ×1
search-path ×1
uiview ×1
video ×1
xcode ×1