小编Zel*_*lko的帖子

UIKit for Mac中不存在“ NSApp”:如何在macOS的iOS应用中嵌入仅Mac框架?

Mac版UIKit

我正在探索Xcode 11和macOS Catalina的新可能性,以使用UIKit创建Mac版本的iPad应用程序。通常按预期工作。

什么是最好的方式定制NSWindow在在MacOS iOS应用程序?


超越复选框

https://developer.apple.com/documentation/uikit/creating_a_mac_version_of_your_ipad_app

您可以使用相同的方法来包含仅在macOS中可用的框架和代码。对于框架,请选择macOS作为平台设置,并使用#if targetEnvironment(UIKitForMac)语句将代码括起来。

首先,我创建了一个基本的macOS框架(例如MacMan.framework)来配置Mac特定的行为。

尽管尽了最大的努力,但我还是遇到了错误:

  • Mac版的UIKit中无法使用“ NSApp”
  • Mac OS的UIKit中没有'NSWindow'
  • 为Mac构建UIKit,但为macOS构建链接框架“ MacMan.framework”。您可能需要配置“ MacMan.framework”以针对Mac的UIKit进行构建,或者限制在目标编辑器中应链接此框架的平台。

相反似乎正确(易于排除代码)

#if !targetEnvironment(UIKitForMac)

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

#endif
Run Code Online (Sandbox Code Playgroud)

参考文献:

https://www.highcaffeinecontent.com/blog/20190607-Beyond-the-Checkbox-with-Catalyst-and-AppKit

macos cocoa uikit appkit ios

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

SLComposeViewController黑暗键盘外观

怎么UIKeyboardAppearanceDarkSLComposeViewController


SLComposeViewController班提出了以用户为撰写支持社交网络服务的一个职位.

SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];

[self presentViewController:controller
                   animated:YES
                 completion:nil];
Run Code Online (Sandbox Code Playgroud)

SLComposeViewController类参考


丑陋!

这是浅色键盘在深色背景下的外观:丑陋


小样!

这是黑暗键盘在深色背景下的外观:小样

uikeyboard ios uiappearance ios7 ios7.1

8
推荐指数
3
解决办法
1264
查看次数

你如何使用resizeAspectFill在watchOS上播放视频?

在watchOS应用中播放视频.

WKInterfaceMovie - 一个界面元素,可让您在watchOS应用程序中播放视频和音频内容.


按预期工作.视频播放.如何缩放它以填满屏幕

  1. 故事板中有一个可视化选项.选择调整大小宽高比填充将被忽略.

Xcode的屏幕截图

  1. 有一个功能: func setVideoGravity(_ videoGravity: WKVideoGravity)

电影的大小调整选项.有关可能值的列表,请参阅WKVideoGravity类型.


import WatchKit
import Foundation

class InterfaceController: WKInterfaceController {
    @IBOutlet weak var movieView: WKInterfaceMovie!

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)

        setupVideoPlayer()
    }

    func setupVideoPlayer() {
        guard let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") else {
            return
    }

        movieView.setMovieURL(videoURL)
        movieView.setVideoGravity(.resizeAspectFill)
    }
}
Run Code Online (Sandbox Code Playgroud)

Xcode中的基本设置.轻触播放按钮时视频加载.加载后播放.不填充屏幕.


WKVideoGravity

表示视频内容外观的常量.

case resizeAspectFill
Run Code Online (Sandbox Code Playgroud)

调整内容的大小以完全填充边界矩形,同时保留内容的原始宽高比.此选项会导致视频边缘超出其裁剪范围.

那很完美.我们来试试吧.


它不起作用.

无论videoGravity(在故事板或代码中),视频播放都会调整大小以适应,只有在我点按两次时才会填满屏幕.

我错过了什么?


另外,如果我presentMediaPlayerController使用Media Player Options 探索该方法,我会注意到一种奇怪的行为:

WKMediaPlayerControllerOptionsAutoplayKey

• …

video movie ios watchkit watchos

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

使用听写 - iOS 6 - DidStart?

如何回应开始听写?


回应听写的已知方法:

  • dictationRecordingDidEnd - 响应完成对口述短语的识别.

  • dictationRecognitionFailed - 响应失败的听写识别.


参考: UITextInput协议参考

从iOS 5.1开始,当用户在支持的设备上选择听写输入时,系统会自动将识别的短语插入当前文本视图中.UITextInput协议中的方法允许您的应用程序响应完成听写,如"使用听写"中所述.您可以使用UIDictationPhrase类的对象来获取表示用户已指定的短语的字符串.在不明确的听写结果的情况下,听写短语对象提供包含替代字符串的数组.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextInput_Protocol/Reference/Reference.html

ios uitextinput ios6 dictation

6
推荐指数
2
解决办法
3751
查看次数

如何将AFIncrementalStore映射到Twitter API v1.1?

你如何映射AFIncrementalStore到Twitter API v1.1?


AFNetworking的核心数据持久性,完成正确

https://github.com/AFNetworking/AFIncrementalStore

REST API v1.1资源

https://dev.twitter.com/docs/api/1.1


- (id)representationOrArrayOfRepresentationsOfEntity:(NSEntityDescription *)entity
                                  fromResponseObject:(id)responseObject;

- (NSDictionary *)representationsForRelationshipsFromRepresentation:(NSDictionary *)representation
                                                           ofEntity:(NSEntityDescription *)entity
                                                       fromResponse:(NSHTTPURLResponse *)response;

- (NSString *)resourceIdentifierForRepresentation:(NSDictionary *)representation
                                         ofEntity:(NSEntityDescription *)entity
                                     fromResponse:(NSHTTPURLResponse *)response;

- (NSDictionary *)attributesForRepresentation:(NSDictionary *)representation
                                     ofEntity:(NSEntityDescription *)entity
                                 fromResponse:(NSHTTPURLResponse *)response;

- (NSMutableURLRequest *)requestForFetchRequest:(NSFetchRequest *)fetchRequest
                                    withContext:(NSManagedObjectContext *)context;

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
                       pathForObjectWithID:(NSManagedObjectID *)objectID
                               withContext:(NSManagedObjectContext *)context;

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
                       pathForRelationship:(NSRelationshipDescription *)relationship
                           forObjectWithID:(NSManagedObjectID *)objectID
                               withContext:(NSManagedObjectContext *)context;
Run Code Online (Sandbox Code Playgroud)

twitter core-data ios afincrementalstore ios7

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

带菜单的NSTableView,如何通过右键单击更改边框颜色?

NSTableView 带有附加的 NSMenu。

右键单击表视图后,将出现菜单。有了它,表视图将突出显示带有彩色边框的行。

使用Mac 开发人员库中的HoverTableDemo作为参考点。

默认颜色对应于“系统偏好设置”->“常规”->“突出显示颜色”中的用户首选项。

问:如何更改/删除此边框颜色?

在此输入图像描述

macos nstableview swift osx-yosemite

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

NSStoryboardSegue示例代码(Yosemite Storyboard)

OS X Yosemite推出了NSStoryboardSegue

"故事板segue指定故事板中两个场景之间的过渡或遏制关系......"


更新:

•如果我尝试在带有Yosemite的Storyboard中使用NSStoryboardSegue子类,则它会与SIGABRT崩溃.

•如果我忽略segues,并使用指定的自定义动画师手动呈现视图控制器以进行演示和解雇,

func presentViewController(_ viewController: NSViewController,
                  animator animator: NSViewControllerPresentationAnimator)
Run Code Online (Sandbox Code Playgroud)

它按预期工作.


这篇文章提供了额外的见解:在OS X Yosemite中为ViewController定制动画

使用它作为参考,这是我到目前为止的尝试:

class FadeSegue: NSStoryboardSegue {

    override func perform() {
        super.perform()
        sourceController.presentViewController(destinationController as NSViewController,
            animator: FadeTransitionAnimator())
    }
}


class FadeTransitionAnimator: NSObject, NSViewControllerPresentationAnimator {

    func animatePresentationOfViewController(toViewController: NSViewController, fromViewController: NSViewController) {

        toViewController.view.wantsLayer = true
        toViewController.view.layerContentsRedrawPolicy = .OnSetNeedsDisplay
        toViewController.view.alphaValue = 0
        fromViewController.view.addSubview(toViewController.view)
        toViewController.view.frame = fromViewController.view.frame

        NSAnimationContext.runAnimationGroup({ context in
            context.duration = 2
            toViewController.view.animator().alphaValue = 1
            }, completionHandler: nil)
    }

    func animateDismissalOfViewController(viewController: NSViewController, fromViewController: NSViewController) { …
Run Code Online (Sandbox Code Playgroud)

macos objective-c swift osx-yosemite

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

Shift Swift数组

一系列的颜色

let colorArray = [
    UIColor.redColor(),
    UIColor.orangeColor(),
    UIColor.yellowColor(),
    UIColor.greenColor(),
    UIColor.blueColor()
]
Run Code Online (Sandbox Code Playgroud)

目标是转移阵列:

  1. 从不同的颜色开始.
  2. 保持颜色的循环顺序.

示例#1

如果我们想要以橙色(原始数组中索引1处的颜色)开始,则数组将如下所示:

let colorArray = [
    UIColor.orangeColor(),
    UIColor.yellowColor(),
    UIColor.greenColor(),
    UIColor.blueColor(),
    UIColor.redColor(),
]
Run Code Online (Sandbox Code Playgroud)

例#2

如果我们想要以绿色(原始数组中索引3处的颜色)开始,则数组将如下所示:

let colorArray = [
    UIColor.greenColor(),
    UIColor.blueColor(),
    UIColor.redColor(),
    UIColor.orangeColor(),
    UIColor.yellowColor()
]
Run Code Online (Sandbox Code Playgroud)

arrays ios swift

4
推荐指数
2
解决办法
6355
查看次数

如何在 iOS 15 中使用 AttributedString 描边文本?

iOS 15 包含对AttributedString的支持

例子

struct PlaygroundView: View {
    func attributedString(string: String) -> AttributedString {
        var text = AttributedString(string)
        text.font = .largeTitle.bold()
        text.foregroundColor = .blue
        return text
    }
    
    var body: some View {
        Text(attributedString(string: "Hello"))
    }
}
Run Code Online (Sandbox Code Playgroud)

归属文本

文档提到属性范围

AttributedString API 定义了常见用途的键,例如文本样式、语义标记可格式化类型(例如日期和数字)以及超链接。您可以在 AttributeScopes 枚举中找到这些属性,其中包含 Foundation、SwiftUI、UIKit 和 AppKit 的属性。

这是描边颜色属性的描边颜色,但它似乎什么也没做。

struct PlaygroundView: View {
    func attributedString(string: String) -> AttributedString {
        var text = AttributedString(string)
        text.font = .largeTitle.bold()
        text.foregroundColor = .blue
        text.strokeWidth = 5
        text.strokeColor = .red
        return text
    } …
Run Code Online (Sandbox Code Playgroud)

uikit nsattributedstring ios swiftui

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

自定义NSStoryboard不会将NSViewController添加到Responder Chain

总体目标:在macOS上使用自定义故事板segue

手头的问题是响应者链.根据Apple的说法:

此外,在macOS 10.10及更高版本中,视图控制器参与响应者链.NSViewController

如果我在macOS故事板中使用标准segue,则目标视图控制器的行为与预期一致 - 焦点,键等效,响应者链等.

但是,如果我使用自定义segue,目标视图控制器不会按预期运行:(具体而言,密钥等效项神秘地无法工作 - 但是,在测试中,来自视图控制器的按钮上的等效键继续工作(这不是' t help/desired)

在macOS 10.12上,我使用以下自定义segue ...我做错了什么?

class PushSegue: NSStoryboardSegue {

override func perform() {
    (sourceController as AnyObject).presentViewController(destinationController as! NSViewController, animator: PushAnimator())
}
}


class PushAnimator:  NSObject, NSViewControllerPresentationAnimator  {

func animatePresentation(of viewController: NSViewController, from fromViewController: NSViewController) {
    viewController.view.wantsLayer = true
    viewController.view.frame = CGRect(x: fromViewController.view.frame.size.width, y: 0,
                                       width: fromViewController.view.frame.size.width, height: fromViewController.view.frame.size.height)
    fromViewController.addChildViewController(viewController)
    fromViewController.view.addSubview(viewController.view)

    let futureFrame = CGRect(x: 0, y: 0, width: viewController.view.frame.size.width,
                             height: …
Run Code Online (Sandbox Code Playgroud)

xcode nsviewcontroller nsresponder swift macos-sierra

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

显示错误的当前时间

我的时钟时间是2012-04-12 09:37:01 +0000但是我的代码输出显示2h延迟.有人为什么呢?

NSDate *today;
today = [[NSDate alloc] init];
Run Code Online (Sandbox Code Playgroud)

---在输出字段/调试器中==>

(lldb) po today
(NSDate *) $3 = 0x06a3a8c0 2012-04-12 07:37:01 +0000
Run Code Online (Sandbox Code Playgroud)

objective-c nsdateformatter ios ios5 xcode4.2

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

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