小编Kev*_*n R的帖子

如何在UICollectionViewCell内缩放UIScrollView?

我正在尝试添加一个UIScrollView内部UICollectionViewCell.这个想法是你可以使用捏缩放UIScrollView(和它,它内部的图像),但滚动视图似乎不处理任何手势.我猜他们被这个人抓住了UICollectionView.

我给自己定的委托UIScrollViewUICollectionViewCell,但没有委托方法被调用.

编辑:我用代码制作了一个github repo(尽可能简化).虽然它只是几行代码,但我看不出我做错了什么.

编辑2:找到答案后,我添加了修复上述回购,希望其他人发现它也有帮助:)

https://github.com/krummler/gallery-pinchzoom-example

objective-c uikit ios

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

生成的证书在移动到资源文件夹时停止工作

我正在使用生成的证书来解决问题,我用它来连接苹果推送服务.当生成的p12文件位于我的src/main/java文件夹中时,一切正常,但我将其移动到src/main/resources,并决定停止处理以下错误:

DerInputStream.getLength(): lengthTag=111, too big.
Run Code Online (Sandbox Code Playgroud)

要了解更多细节:我正在使用notnoop推送通知库,并按照Ray Wenderlich的教程生成证书.之后,我习惯按照命令生成一个p12文件,以便在java中使用:

openssl x509 -in aps_development.cer -inform DER -out aps_development.pem -outform PEM
openssl pkcs12 -nocerts -in single.p12 -out single.pem
openssl pkcs12 -export -inkey single.pem -in aps_development.pem -out dual.p12
Run Code Online (Sandbox Code Playgroud)

之后我将dual.p12移动到我的java项目中.首先,文件位于我的/ src/main/java文件夹中,让我们说com.company.push.certificates(当请求文件的代码处于时com.company.push).我通过使用请求输入流

InputStream stream = this.getClass().getResourceAsStream("certificates/dual.p12");
Run Code Online (Sandbox Code Playgroud)

这在开发中工作正常,但在构建项目时没有(使用maven),这就是为什么我使用完全相同的包将资源移动到资源文件夹.资源仍然被发现,但现在我得到了上述java.io.IOException

有谁知道这可能导致什么?

Ps:当我将文件移回src/main/java中的包时,一切正常,因此证书似乎是有效的.

java ssl certificate apple-push-notifications

14
推荐指数
3
解决办法
9496
查看次数

iOS8:在外部点击时关闭表单

我们目前正在使用类似于此处提到的解决方案(请参阅Ares的答案).这在iOS8中似乎不起作用.

我有一张表单,我想在用户点击表格后面的灰色视图时立即将其解雇.以前,这似乎可以通过向窗口添加手势识别器,并检查分接位置以查看它是否在当前表单之外;

我还注意到需要转换的点(开关x和y)在横向模式下使用.除此之外,现在它只接收从表单内部发生的手势,在屏幕上任何位置的任何轻击手势触发事件之前.

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBehind:)];
    self.recognizer.numberOfTapsRequired = 1;
    self.recognizer.cancelsTouchesInView = NO;
    [self.view.window addGestureRecognizer:self.recognizer];
}

- (void)handleTapBehind:(UITapGestureRecognizer *)sender
{
    if (sender.state == UIGestureRecognizerStateEnded)
    {
        CGPoint location = [sender locationInView:nil];
        if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) && IOS8)
        {
            location = CGPointMake(location.y, location.x);
        }

        // if tap outside pincode inputscreen
        BOOL inView = [self.view pointInside:[self.view convertPoint:location     fromView:self.view.window] withEvent:nil];
        if (!inView)
        {
            [self.view.window removeGestureRecognizer:sender];
            [self dismissViewControllerAnimated:YES completion:nil];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

xcode objective-c ios ios8

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

在多个项目上共享快速代码

所以我们有一些共享代码的项目,现在它们必须至少与iOS7保持兼容.

目前,我们使用本地cocoapods在不同的应用程序之间共享代码.这有一个缺点,即所有共享代码都放在一个组中.此外,Cocoapods团队解释了为什么iOS7项目无法使用swift pod:

CocoaPods仅支持OS X 10.9及更高版本的Swift,以及iOS 8及更高版本.

原因如下:

苹果X 10/iOS 7及更新版本支持Swift,Apple已多次声明.不支持使用Swift构建静态存档.所有版本的OS X都支持动态框架.在8之前的iOS版本上不支持动态框架:

ld:警告:嵌入式dylibs/frameworks仅在iOS 8或更高版本上运行.

(来源:http://blog.cocoapods.org/Pod-Authors-Guide-to-CocoaPods-Frameworks/)

鉴于此信息,我们希望尝试使用Cocoa Touch Framework-project 共享代码.

我做的是:

  • 在工作区中,创建一个新项目 - > Cocoa Touch Framework
  • 在此处添加/移动swift代码并将所需的函数/等定义为 public
  • 在主构建目标中,将新项目添加为"嵌入式框架"
  • 如果需要使用定义库中的类,请使用import语句,其中构建目标名称是模块名称(在我的示例中import Cobra)

这似乎也适用于iOS7.这很奇怪,因为在网上我读到这个警告确保该应用程序无法在iOS7设备上运行:

embedded dylibs/frameworks only run on iOS 8 or later
Run Code Online (Sandbox Code Playgroud)

但是,对于我们来说,它似乎在我们的iOS 7测试设备上运行良好.此外,这关系到我:

在此输入图像描述

框架路径似乎直接链接到我的本地DerivedData文件夹.我没有专门选择我的DerivedData文件夹,我只是在Xcode中添加了建议的框架,它决定自己从DerivedData文件夹中获取它.我们与多个程序员一起开展这个项目.

TL; DR;

在我沿着这条路走下去并将代码移到这个新设置之前:

  • Wil这种嵌入共享库的方式会给我的团队带来问题吗?(换句话说:我做错了吗?)
  • 在将应用程序提交到App Store时,这种嵌入库的方式是否会导致任何问题?
  • 如果需要:除了简单地来回复制代码/文件之外,还有其他方法可以在项目之间共享代码吗?我无法相信没有其他人有这个问题.

xcode dynamic-library ios7 swift

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

Android领域加密示例

我从以下链接https://github.com/realm/realm-java/tree/master/examples/encryptionExample/src/main/java/io/realm/examples/encryptionexample创建了Realm Encryption Example项目源.当我运行时项目没有任何代码更改,它运行没有错误.但我在源代码中注释以下行

Realm.deleteRealm(realmConfiguration);
Run Code Online (Sandbox Code Playgroud)

因为我不需要删除旧文件.然后我启动application.it抛出错误java.lang.IllegalArgumentException:非法参数:领域文件的格式无效.

如何使用相同的加密密钥读取Realm文件.

源代码:

    package io.realm.examples.encryptionexample;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import java.security.SecureRandom;

import io.realm.Realm;
import io.realm.RealmConfiguration;

public class EncryptionExampleActivity extends Activity {

    public static final String TAG = EncryptionExampleActivity.class.getName();

    private Realm realm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Generate a key
        // IMPORTANT! This is a silly way to generate a key. It is also never stored.
        // For proper key handling please consult:
        // * https://developer.android.com/training/articles/keystore.html
        // * http://nelenkov.blogspot.dk/2012/05/storing-application-secrets-in-androids.html
        byte[] …
Run Code Online (Sandbox Code Playgroud)

android realm

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

Xcode 12 和 OSLog (os.log):包装 OSLogMessage 导致编译错误:参数必须是字符串插值

在 Xcode 12 / iOS 14 中,OSLog 获得了对字符串插值的支持(是的!)。但是仍然无法附加钩子来轻松登录到其他渠道,例如 Crashlytics。

所以我想我会做一个简单的包装器并传递参数。然而,字符串插值似乎发生了一些神奇的事情。

提供的新 Logger 类,它接受一个OSLogMessage作为参数,可以按如下方式使用:

let someVar = "some var"
let logger = Logger(subsystem: "com.my.app", category: "UI")

logger.error("some message")
logger.error("some message with default var: \(someVar)")
logger.error("some message with private var: \(someVar, privacy: .private)")
logger.error("some message with private var: \(someVar, privacy: .private(mask: .hash))")
logger.error("some message with public var: \(someVar, privacy: .public)")
Run Code Online (Sandbox Code Playgroud)

包装新的 Logger 结构

所以让我们把它包装在一个结构中:

struct MyLogger {
    let logger = Logger(subsystem: "com.my.app", category: "UI")

    func error(_ message: OSLogMessage) {
        logger.error(message) …
Run Code Online (Sandbox Code Playgroud)

string xcode string-interpolation swift oslog

5
推荐指数
2
解决办法
1468
查看次数

SwiftUI 在滚动列表期间停止更新

给定 SwiftUI 中的列表,一旦开始平移,列表中视图的更新似乎会暂停,直到滚动停止。有没有办法防止这种情况?

考虑以下代码:

class Model: ObservableObject, Identifiable {
    @Published var offset: CGFloat = 0

    let id = UUID()
    private var timer: Timer!

    init() {
        timer = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true, block: { _ in
            self.update()
        })
    }

    func update() {
        offset = CGFloat.random(in: 0...300)
    }
}

struct ContentView: View {
    @ObservedObject var model1 = Model()
    @ObservedObject var model2 = Model()
    @ObservedObject var model3 = Model()
    @ObservedObject var model4 = Model()

    var body: some View {
        List {
            ForEach([model1, model2, …
Run Code Online (Sandbox Code Playgroud)

swiftui combine

3
推荐指数
2
解决办法
330
查看次数