小编Mat*_*ley的帖子

如何在iOS 7上模仿键盘动画,将"完成"按钮添加到数字键盘?

我一直在做这样的事情来模仿旧版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上运行.看起来返回的值不再完全正确,完成按钮不再完全模仿键盘显示动画.

keyboard animation objective-c uiview ios

27
推荐指数
4
解决办法
1万
查看次数

Objective-C的新文字语法可以模仿addObject吗?

我知道我可以这样做:

NSMutableArray *objects = [@[objectOne, objectTwo] mutableCopy];
NSObject *someObject = [NSObject new];
objects[0] = someObject;
Run Code Online (Sandbox Code Playgroud)

但有没有办法让新的文字语法模仿addObject:?

objective-c nsarray objective-c-literals

8
推荐指数
1
解决办法
1148
查看次数

幕后iOS风景定位处理

任何人都可以详细解释为什么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)

landscape frame orientation uiviewcontroller ios

6
推荐指数
1
解决办法
669
查看次数

将原始数据转换为iOS的可显示视频

我有一个有趣的问题,我需要研究与非常低级别的视频流.

有没有人有过将原始字节流(分成每像素信息,但不是标准格式的视频)转换为低分辨率视频流的经验?我相信我可以将数据映射到每像素字节的RGB值,因为与原始数据中的值对应的颜色值将由我们确定.我不知道从那里去哪里,或者每个像素需要RGB格式.

我看过FFMPeg,但它的文档很大,我不知道从哪里开始.

我所包含的具体问题是,是否可以使用该像素数据创建CVPixelBuffer?如果我这样做,我需要转换为每像素数据的格式是什么?

另外,我是否应该更深入地研究OpenGL,如果是这样,哪里可以找到有关此主题的信息的最佳位置?

那么CGBitmapContextCreate呢?例如,如果我去了,我就是这样的,一个典型的像素字节需要看起来像什么?这是否足够快以保持帧速率高于20fps?

编辑:

我认为在你们的帮助下,以及我自己的一些研究,我已经制定了一个如何构建原始RGBA数据的计划,然后根据该数据构建CGImage,从而创建一个来自CGImage的CVPixelBuffer来自CGImage的CVPixelBuffer.

然而,为了在数据进入时播放,我不确定我会看到什么样的FPS.我是否将它们绘制到CALayer,或者是否有类似AVAssetWriter的类,我可以使用它来添加CVPixelBuffers.我的经验是使用AVAssetWriter将构建的CoreAnimation层次结构导出到视频,因此视频总是在开始播放之前构建,而不是显示为实时视频.

video encoding opengl-es core-video ios

4
推荐指数
1
解决办法
1940
查看次数

NSFetchRequest - 包括待定更改

我的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"结尾.知道是什么原因引起的吗?

core-data nsfetchedresultscontroller nsfetchrequest ios

3
推荐指数
1
解决办法
1679
查看次数

NSBundle pathForResource无法正常工作

在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包中.

objective-c nsbundle ios

2
推荐指数
1
解决办法
1647
查看次数

双引号在Xcode的搜索路径中表示什么?

今晚我们遇到了一个恼人的问题,只能在Xcode的命令行构建中出现,而不是来自Xcode的GUI.

当从具有Xcode GUI的机器构建时,使用$ PROJROOT的递归用户头搜索路径,没有双引号,我们没有遇到任何问题.但是,当使用使用Xcode命令行构建功能的Jenkins进行构建时,会抛出Headers不可用的错误.

经过一个小时的探索,有人决定尝试用双引号包装反复的$ PROJROOT("$ PROJROOT").一旦发生这种情况,Jenkins命令行的建设终于成功了.

所以我们并不完全理解用引号包装搜索路径或省略引号的后果.

任何人都可以了解究竟是什么导致了这个问题?什么双引号从命令行对GUI表示编译器?

xcode search-path ios jenkins

2
推荐指数
1
解决办法
1512
查看次数