以下代码获取当前屏幕的UIImage:
UIGraphicsBeginImageContext(self.view.frame.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:ctx];
UIImage *backgroundImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)
如果我有一个CGRect矩形,我想只获得该矩形中当前屏幕的UIImage,我该怎么办?
好吧,对你们中的一些人来说,这个问题可能听起来很荒谬,但我正和我的队友讨论ios应用程序的设计,我需要你对它的看法.
我不同意的旧设计如下
正如您所看到的,ViewController A和B之间存在一个segue循环,我认为我们永远不应该让它发生.我更喜欢通过导航栏中的"后退"按钮从B到A.
设计中的PUSH segue循环有多严重?在某些情况下是否可以接受?我在哪里可以看到苹果推荐的好设计(如果有的话?)
编辑:我尝试nfarshchi的"pop before push"解决方案,但它不起作用.这就是我的方法:1)我不能创建从VC A到VC B的segue,同时从VC B到VC A.似乎故事板阻止它发生2)因此我创建了一个segue,其标识符是"gotoB",从VC A中的Button"Go to B"到VC B,以及一个segue,其标识符是"gotoA",来自Button"Go to A"在VC B到VC A.
故事板看起来像这样:
VC X --- Push ---> VC A <---- Push ----> VC B(之后我需要ViewController X的原因将在后面解释)3)在VC中我有这样的:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"Prepage for segue go to B") ;
if ([[segue identifier] isEqualToString:@"gotoB"] ) {
[self.navigationController popViewControllerAnimated:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
我需要VC X,因为如果只有一个ViewController,我就无法从Stack中弹出ViewController.
现在看来是对的,但是当我点击"转到B"时,它转到VC X.很显然,上面的popViewControllerAnimated:已经加入了VC A,而且就是这样,VC B的segue不再被触发了.结果是VC B没有像预期的那样被推入Stack.
因此,我认为实施nfarshchi的解决方案是不可行的
我的应用刚刚被拒绝,并显示以下消息:
解放军3.3.12
我们发现您的应用使用了iOS广告标识符,但不包含广告功能。这不符合App Store审查指南要求的iOS开发者计划许可协议的条款。
具体来说,iOS开发人员计划许可协议的第3.3.12节规定:
“您和您的应用程序(以及您与之签约提供广告的任何第三方)只能将广告标识符以及通过使用广告标识符获得的任何信息用于广告目的。如果用户重置了广告标识符,那么您同意不将先前的广告标识符和任何派生的信息与重置的广告标识符直接,间接地结合,关联,链接或以其他方式关联。”
注意:iAd不使用AdSupport框架,ASIdentifierManager或广告标识符。因此,iAd实施不需要它们,因此不应将它们包含在您的应用中以获取iAd支持。
如果您的应用正在投放广告,请:
确保您已在设备(不仅是模拟器)上测试了您的应用程序,并且在测试之前已删除了所有先前版本的应用程序
向我们提供在您的应用中查找广告的步骤
如果您的应用未投放广告,请检查您的代码(包括任何第三方库)以删除以下任何实例:
类:ASIdentifierManager选择器:advertiseIdentifier框架:AdSupport.framework
如果您打算在以后的版本中加入广告,请在您添加广告功能之前,从您的应用中删除广告标识符。
为了帮助找到广告标识符,请使用“ nm”工具。有关“ nm”工具的信息,请参见nm手册页。
如果您无权访问库的源代码,则可以使用“字符串”或“ otool”命令行工具来搜索已编译的二进制文件。“字符串”工具列出了库调用的方法,而“ otool -ov”列出了Objective-C类结构及其定义的方法。这些技术可以帮助您缩小有问题的代码所在的位置。
我的应用仅使用iAd,没有其他用于广告的框架。我试图找出问题所在,这是我发现的结果:
在构建设置中,我看到了AdSupport框架:
由于在某个地方进行了一些教程,我可能将其包括在内。这是问题吗?如果删除AdSupport.framework,我的iAd仍然可以正常工作吗?
使用命令行,我将CD转到项目的根文件夹,然后
grep -r advertisingIdentifier。
我得到以下结果:
./Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEventsUtility.m:result = [[manager advertisingIdentifier] UUIDString];
以下是FBSDKAppEventUtility.m中的详细代码(FacebookSDK 4.1.0-我阅读了有关FacebookSDK有关FBSDK 3.1中广告标识符的问题的帖子。我无法相信问题仍存在于FBSDK 4.1.0中!):
+ (NSString *)advertiserID
{
NSString *result = nil;
Class ASIdentifierManagerClass = fbsdkdfl_ASIdentifierManagerClass();
if ([ASIdentifierManagerClass class]) {
ASIdentifierManager *manager = [ASIdentifierManagerClass sharedManager];
result = [[manager advertisingIdentifier] UUIDString];
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我使用pod在我的应用程序中安装了Facebook SDK,并且如您所见,代码中包含与adsingIdentifier相关的内容。
我还在FBSDKAppEventUtility.m中看到:
#import <AdSupport/AdSupport.h>
Run Code Online (Sandbox Code Playgroud)
以及FBSDKAppEventUtility.m中其他函数中ASIdentifierManagerClass的几种存在
还会导致我被拒绝吗?是否有人通过使用FBSDKCoreKit使用广告标识符而被拒绝?
我正在尝试通过cocoapods安装ParseUI,Facebook SDK.这是我的pod文件:
platform :ios, '8.0'
pod 'ParseUI', '~> 1.1.3'
pod 'Parse', '~> 1.7.2'
pod 'Facebook-iOS-SDK', '~> 4.1.0'
pod 'ParseFacebookUtilsV4', '~>1.7.2'
pod 'AFNetworking', '~> 2.5.3'
Run Code Online (Sandbox Code Playgroud)
安装pod后,我收到了警告
"Facebook-iOS-SDK已被弃用,转而支持FBSDKCoreKit".
这是否意味着我应该通过删除行卸载"Facebook-iOS-SDK"
pod 'Facebook-iOS-SDK', '~> 4.1.0'
Run Code Online (Sandbox Code Playgroud)
和pod再次安装?
ParseUI是否适用于pod'Facebook-iOS-SDK','〜> 4.1.0'?
我有一个通过Facebook登录的应用程序.登录时,我只询问"public_profile","user_friends"和"email"权限.我知道我可以在以后要求更多的许可,因为FB说:
"即使有人第一次登录,你的应用也可以随时要求获得额外的权限.例如,publish_actions权限允许你发布到一个人的Facebook时间线.建议你只有当一个人是准备向Facebook发布一个故事."
因此,当我即将发布到用户的墙上时,我想要求"publish_actions".请告诉我如何使用Facebook SDK 4.大多数答案与FBSession,activeSession,requestNewPublishPermissions等有关,但在最新的Facebook SDK(4.1.0)中,没有FBSession类.
我在 Google 开发者控制台中创建了一个 iOS 密钥,如下所示:
我想将此密钥仅限于一个应用程序,因此我“编辑允许的 iOS 应用程序”将我的捆绑包 ID 添加到其中。我的包 ID 很容易在我的项目目标的“常规”选项卡中找到,如下所示:
我不知道它是否区分大小写,但我从那里准确复制标识符以添加到密钥中。正如您所看到的,这是不会弄错的。我也按照谷歌的指示,每行一个包标识符(我只输入一行):
使用下面列出的捆绑包标识符之一接受来自 iOS 应用程序的请求(可选)每行一个捆绑包标识符。示例:com.example.MyApp
或者,如果您将此留空,则来自任何 iOS 应用程序的请求都将被接受。在生产中使用此密钥之前,请务必添加捆绑包标识符。
此屏幕显示我已启用所有必要的服务,可以肯定:
我的问题是,每当我向密钥添加包标识符时,我的应用程序就会停止工作。但是当我删除它时(现在“允许任何应用程序”,如图所示),一切都恢复正常。
谁能告诉我这可能是什么原因造成的?
更新:为了澄清更多信息:当我将捆绑包 ID 添加到开发者控制台中的密钥时,现在我仍然可以在我的应用程序中使用附近的搜索。但自动完成搜索和 Google URL 缩短器已停止工作。