小编Ada*_*eld的帖子

了解在iOS中查看控制器嵌套

在过去的几天里,我一直在试着理解这个看似基本的iOS开发概念:

  • 如果我想在同一个"屏幕"中显示和使用两个或更多View Controller,请执行以下操作:

    1. 根据Apple的"每个屏幕内容只有一个VC",这是不可取的
    2. 通过代码添加VC完全可以实现
    3. 没做完.相反,使用一个VC并简单地添加模仿所需视图控制器功能的代码.

让我重新说一下:

如果我想在一个iPad应用程序中,UIView(A)占据屏幕左侧的大部分,而第二个UIView(B)占据屏幕右侧的其余部分,我想要向UIViewB 添加一个按钮,当点击它时会使用模态转换来向上滑动UITableview以替换UIView B,这UITableview将是一个典型的行为UITableviewController,当用户从表中选择一个项目时,典型的事件将被发送到tableview控制器推送一组新项目,这可能吗?

在我看来,如果我已经能够轻松地创建两个单独的UIViewControllers,并且在一个VC中有一个按钮以模态方式调出第二个VC,为什么我不能将这个功能结合起来,这样一个VC有两个子VC,那些孩子VC处理自己的模态转换.

或者在这种情况下最好的做法就是只需要一个VC来处理所有内容,然后在对各种UI元素进行各种点击后手动处理各种视图中的幻灯片动画?

正如你所知道的那样,我认为我已经阅读了太多不同的,相互矛盾的对类似问题的回答,我已经完全混淆了什么了.如果有人在那里了解我得到了什么,可以提供帮助解释或一些指示我非常欣赏它.

cocoa nested interface viewcontroller ios

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

Cocoa - 如何在故事板模式下将视图的委托连接到文件的所有者?

当我使用.xib时,我通过界面构建​​器将视图的委托连接到文件所有者,然后进入视图控制器的.h文件并将其设置为委托以完成连接.

但是在故事板模式下,没有文件的所有者对象.我正在使用名为NinevehGL的引擎,它简化了使用openGL渲染模型的过程.这个引擎要求我创建一个视图,将它的类设置为NGLView,将它的委托连接到文件的所有者对象,并添加到视图控制器.h文件的头文件以完成连接(然后实现适当的方法,如viewView在视图控制器中).通过.xib文件,这一切都很棒,但我如何通过故事板实现这一目标?

我显然更喜欢在xcode中采用新的故事板技术,但我似乎无法弄清楚如何模仿我通常使用故事板在.xib中进行的过程.苹果文档提到使用rootViewController,但解释有点模糊.

任何人都可以向我解释这个过程吗?

cocoa delegates storyboard file-ownership

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

Apple App指南 - 私有API?

根据我的阅读,Apple拒绝使用私有APIS的应用程序.什么决定私有API?我目前正在使用NinevehGL引擎,该引擎已经开放用于商业用途,是否算作私有API?

api private

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

iOS UIApplication openURL非常慢

我已经看到了类似的问题:OpenUrl冻结应用程序超过10秒但它没有处理我更改第二个应用程序的安装状态的具体用例,并且那里列出的解决方案都没有解决我的问题,所以我是打开这个问题.

简化情况的简短摘要:

我们有两个应用程序,我们称之为appA和appB.在appA中,我们有一个按钮,允许您打开应用商店以在未安装appB的情况下下载appB,或者如果安装了appB则打开appB.每次打开/恢复appA时,它会通过执行a检查是否安装了appB [[UIApplication sharedApplication] canOpenURL: <<appB's URL scheme>>],如果结果为true,则appA的按钮显示"Open AppB",否则显示"Get AppB".

当点击appA的按钮时,它会canOpenURL:再次进行检查,并将App Store打开到appB,或通过深层链接打开appB.非常简单的东西.从字面上看,代码是:

if ( [[UIApplication sharedApplication] canOpenURL:appBDeepLink] ) {

   [[UIApplication sharedApplication] openURL: appBDeepLink];

} else {

   [[UIApplication sharedApplication] openURL: appBAppStoreLink];

}
Run Code Online (Sandbox Code Playgroud)

这一切都按预期工作,但是,如果您更改appB的安装状态并返回到appA,则在最后打开URL之前,对下次点击时,对openURL的调用会冻结5-10秒.

例如,以下是导致冻结的两种情况:

场景1:安装appB

  1. 用户没有安装appB

  2. 用户打开appA

  3. 用户点击"获取AppB"

  4. 用户被带到App Store并安装appB

  5. 用户重新打开appA(将其带到前台,它从未关闭)

  6. appA看到appB现已安装,并将其按钮更改为"Open AppB"

  7. 用户点击"打开AppB"

8.应用程序冻结5-10秒

  1. appA打开appB

场景2:卸载appB

  1. 用户安装了appB

  2. 用户打开appA

  3. 用户点击"打开AppB"

  4. appB已打开

  5. 用户关闭appB

  6. 用户卸载appB

  7. 用户重新打开appA(将其带到前台,它从未关闭)

  8. appA看到appB现已卸载,并将其按钮更改为"Get AppB"

  9. 用户点击"获取AppB"

10.应用程序冻结5-10秒

  1. appA打开App Store

看起来似乎某个UIApplication实例没有更新它的内部列表,可以通过openURL打开哪些应用程序,直到应用程序被终止/重新打开,或再次调用openURL,并且调用openURL会导致冻结,因为它重新配置它是可以打开哪些应用程序的内部列表(我在这里完全猜测,我不知道它是如何工作的).无论如何,冻结是存在的,我已经尝试了很多方法来绕过它而没有任何成功,包括:

  • 使用GCD调度到主线程

  • 使用GCD调度到后台线程

  • 在短暂的0.1秒延迟后执行openURL调用

  • 使用NSThread的detachNewThreadSelector:toTarget:withObject在不同的线程上执行调用

似乎没有什么工作,延迟始终存在,直到我关闭appB并重新打开它.在线搜索,有一些Stackoverflow帖子从iOS 7开始注意到这种行为,但他们的解决方案(我上面尝试过的解决方案)似乎是针对从你不应该的地方调用openURL的整体延迟(在application:didFinishLaunchingWithOptions:,例如),我一直没能明确找到任何有关应用程序已经被安装/卸载后打开一个URL.

我可以在iOS 8.4上100%复制这个.

还有其他人遇到过这个吗?有什么解决方案吗?

objective-c freeze uiapplication openurl ios

5
推荐指数
1
解决办法
1084
查看次数

使用SCNNode作为渲染"掩码"?

是否有可能使节点呈现"清除",以便在绘制时,场景视图下方的任何视图都显示在通常显示节点的位置?

例如,假设我们的SCNView后面有一个红色的UIView.以球体为例,您将在场景视图中看到一个圆形"洞",红色视图将显示该洞.

有任何想法吗?这会涉及某种着色器吗?

shader ios scenekit

5
推荐指数
1
解决办法
375
查看次数

Swift - 播种arc4random_uniform?还是另类?

首先让我说明我要完成的任务:

  1. 我需要在一个范围内随机生成一组数字
  2. 我希望这些数字在某种程度上均匀分布
  3. 我需要能够为随机数生成种子,以便在给定种子的情况下,得到的随机数将始终相同.

在使用drand48(),rand()和arc4random()进行了相当多的实验之后,我目前已经决定使用rand()获取随机数,并使用srand()进行种子设定.这是一个从我正在做的事情简化的小例子:

let seed: UInt32 = 10
srand(seed)
let start = 0
let end = 100
let randomNumber = Double(rand()) % (end + 1 - start) + start
Run Code Online (Sandbox Code Playgroud)

这有效.给定相同的种子,出现相同的随机数.执行多个randomNumber计算会产生多个不同的随机数.通过srand重新播种再次启动"随机性".

唯一的缺点是rand()不是均匀分布的.事实上,我总是最终得到一组数字,这些数字在大多数情况下线性增加.

听起来像arc4random_uniform会产生更多的均匀随机输出,但是根据我的研究,不可能为arc4random播种,因为它在第一次调用时会自行播种,并且不一定"设计"为外部播种.

所以我的问题; 是否有一个更好的srand()/ rand()替代方案仍然可以为给定的种子提供相同的输出,但这些输出更均匀分布?

谢谢, - 亚当

random swift uniform-distribution

5
推荐指数
1
解决办法
3048
查看次数

Facebook iOS SDK 4.1.0共享回调

使用本问题标题中提到的F​​BSDK,我在视图控制器中提供了一个简单的共享对话框:

// Setup the content for the share
FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = linkUrl;
content.contentDescription = description;
content.contentTitle = title;
content.imageURL = imageUrl;

// Show the share dialog
[FBSDKShareDialog showFromViewController:controller
                             withContent:content
                                delegate:someDelegate];
Run Code Online (Sandbox Code Playgroud)

并实现委托方法......

- (void)sharer:(id<FBSDKSharing>)sharer didCompleteWithResults:(NSDictionary *)results
{
    NSLog(@"Sweet, they shared.");
}
Run Code Online (Sandbox Code Playgroud)

只要用户在他们的设备上安装了Facebook应用程序,到目前为止一切都很好.当用户没有安装Facebook时会出现问题.如果是这种情况,Safari会打开Facebook登录流程的Web版本(这很好),但是如果您在没有登录Facebook /执行任何其他任务的情况下切换回原始应用程序,则上面显示的完成委托方法是调用.

有没有人有任何解决方法的经验?似乎应该有一种可靠的方法来确定这个职位是否确实发生过.

注意:上面的代码非常伪.在实际实现中,我确实实现了所有委托回调(didComplete,didCancel和didFail).

facebook objective-c ios

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

NSString的stringWithFormat的简写类似于@ [],@ {},@()的NSArrays,NSDictionaries和NSNumbers?

我的问题分为两部分:

  1. 是否有通过stringWithFormat创建NSStrings的简写:类似于标题中提到的创建数组,字典和数字的简写.有点像:

NSString *bar = @"bar"; NSString *foobar = @<@"foo %@", bar>

  1. 如果没有,是否有可能创建这些缩写,如果是,如何?

我在整个项目中使用了stringWithFormat方法,我认为这对代码简单性和整洁性都非常有用.

macros objective-c nsstring

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

如何在 UIImage 的不透明像素周围绘制边框(描边)

给定一个包含非不透明(alpha < 1)像素数据的 UIImage,我们如何使用自定义描边颜色和粗细在不透明(alpha > 0)像素周围绘制轮廓/边框/描边?(我问这个问题是为了在下面提供答案)

border core-graphics uiimage stroke swift

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