在过去的几天里,我一直在试着理解这个看似基本的iOS开发概念:
如果我想在同一个"屏幕"中显示和使用两个或更多View Controller,请执行以下操作:
让我重新说一下:
如果我想在一个iPad应用程序中,UIView(A)占据屏幕左侧的大部分,而第二个UIView(B)占据屏幕右侧的其余部分,我想要向UIViewB 添加一个按钮,当点击它时会使用模态转换来向上滑动UITableview以替换UIView B,这UITableview将是一个典型的行为UITableviewController,当用户从表中选择一个项目时,典型的事件将被发送到tableview控制器推送一组新项目,这可能吗?
在我看来,如果我已经能够轻松地创建两个单独的UIViewControllers,并且在一个VC中有一个按钮以模态方式调出第二个VC,为什么我不能将这个功能结合起来,这样一个VC有两个子VC,那些孩子VC处理自己的模态转换.
或者在这种情况下最好的做法就是只需要一个VC来处理所有内容,然后在对各种UI元素进行各种点击后手动处理各种视图中的幻灯片动画?
正如你所知道的那样,我认为我已经阅读了太多不同的,相互矛盾的对类似问题的回答,我已经完全混淆了什么了.如果有人在那里了解我得到了什么,可以提供帮助解释或一些指示我非常欣赏它.
当我使用.xib时,我通过界面构建器将视图的委托连接到文件所有者,然后进入视图控制器的.h文件并将其设置为委托以完成连接.
但是在故事板模式下,没有文件的所有者对象.我正在使用名为NinevehGL的引擎,它简化了使用openGL渲染模型的过程.这个引擎要求我创建一个视图,将它的类设置为NGLView,将它的委托连接到文件的所有者对象,并添加到视图控制器.h文件的头文件以完成连接(然后实现适当的方法,如viewView在视图控制器中).通过.xib文件,这一切都很棒,但我如何通过故事板实现这一目标?
我显然更喜欢在xcode中采用新的故事板技术,但我似乎无法弄清楚如何模仿我通常使用故事板在.xib中进行的过程.苹果文档提到使用rootViewController,但解释有点模糊.
任何人都可以向我解释这个过程吗?
根据我的阅读,Apple拒绝使用私有APIS的应用程序.什么决定私有API?我目前正在使用NinevehGL引擎,该引擎已经开放用于商业用途,是否算作私有API?
我已经看到了类似的问题: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秒.
例如,以下是导致冻结的两种情况:
用户没有安装appB
用户打开appA
用户点击"获取AppB"
用户被带到App Store并安装appB
用户重新打开appA(将其带到前台,它从未关闭)
appA看到appB现已安装,并将其按钮更改为"Open AppB"
用户点击"打开AppB"
8.应用程序冻结5-10秒
用户安装了appB
用户打开appA
用户点击"打开AppB"
appB已打开
用户关闭appB
用户卸载appB
用户重新打开appA(将其带到前台,它从未关闭)
appA看到appB现已卸载,并将其按钮更改为"Get AppB"
用户点击"获取AppB"
10.应用程序冻结5-10秒
看起来似乎某个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%复制这个.
还有其他人遇到过这个吗?有什么解决方案吗?
是否有可能使节点呈现"清除",以便在绘制时,场景视图下方的任何视图都显示在通常显示节点的位置?
例如,假设我们的SCNView后面有一个红色的UIView.以球体为例,您将在场景视图中看到一个圆形"洞",红色视图将显示该洞.
有任何想法吗?这会涉及某种着色器吗?
首先让我说明我要完成的任务:
在使用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()替代方案仍然可以为给定的种子提供相同的输出,但这些输出更均匀分布?
谢谢, - 亚当
使用本问题标题中提到的FBSDK,我在视图控制器中提供了一个简单的共享对话框:
// 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).
我的问题分为两部分:
NSString *bar = @"bar";
NSString *foobar = @<@"foo %@", bar>
我在整个项目中使用了stringWithFormat方法,我认为这对代码简单性和整洁性都非常有用.
给定一个包含非不透明(alpha < 1)像素数据的 UIImage,我们如何使用自定义描边颜色和粗细在不透明(alpha > 0)像素周围绘制轮廓/边框/描边?(我问这个问题是为了在下面提供答案)