小编El *_*ato的帖子

将CIImage转换为NSImage

我正在玩Core Image框架.据我所知,如果我有一个图像(NSImage),首先需要将其转换为CIImage.我能做到.

NSImage *im1 = [[NSImage alloc] initWithContentsOfFile:imagepath];
NSRect rect1;rect1.size.width = img1.size.width; rect1.size.height = img1.size.height;
CGImageRef imageRef1 = [img1 CGImageForProposedRect:&rect1 context:[NSGraphicsContext currentContext] hints:nil];
CIImage *ciimage = [CIImage imageWithCGImage:imageRef1];
Run Code Online (Sandbox Code Playgroud)

我有一个功能,将核心图像过滤器应用于核心图像(CIImage),我想测试.我想将输出图像添加到窗口作为子视图.所以我需要NSImage.如何将此核心图像转换回NSImage?如果我问Google,我的效果不会很好.

谢谢您的帮助.

macos cocoa objective-c core-image nsimage

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

关闭SKScene后,内存仍然很高

我使用dispatch_once NSObject来创建数据指针.因此,当主视图控制器出现时,所有游戏资产指针都会生成.为了玩游戏,用户在UIViewController上点击对应于特定级别的UIButton.我叫它LevelSelectionController.当游戏结束时,用户将点击标签(SKLabel).并且将删除所有操作和节点.

[self removeAllActions];
[self removeAllChildren];
[self removeFromParent];
Run Code Online (Sandbox Code Playgroud)

此外,特定级别的SKScene子类将用户返回到LevelSelectionController的任务委托给呈现游戏SKView的viewcontroller ,如下所示.

- (void)closeScene {
    SKView *spriteView = [[SKView alloc] init];
    [spriteView presentScene:nil];
    [self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

我唯一的问题是当用户离开游戏场景(SKScene)时内存仍然很高.游戏需要大量资产.因此,当游戏开始时,内存使用量将跳至200 MB.当用户返回到原始级别选择视图控制器时,根据活动监视器,游戏模拟器仍然消耗200 MB .当用户进入不同级别时,内存使用量将再跳过10 MB.那么一旦用户离开SKScene,我怎样才能释放上一场比赛的内存?

我正在使用ARC.Xcode版本是5.1.开发目标是iOS 7.1.

谢谢您的帮助.

- 编辑1 -

我太愚蠢.我知道问题是什么.当我关闭场景时,我正在创建一个新的SKView,然后我将其设置为nil以获取当前场景.有用.但这不应该是这样做的方式.相反,我需要在呈现之前将当前SKView设置为变量.当我关闭场景时,我需要将该变量设置为nil.嗯......我没在想.

- 编辑2 - 当前场景以零显示时几乎没有变化.从removeFromSuperview中删除它并没有太大作用.

objective-c ios sprite-kit skview skscene

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

用给定数字制作日期

我有以下Swift(Swift 3)函数来生成一个Date带日期components(DateComponents)的date().

func makeDate(year: Int, month: Int, day: Int, hr: Int, min: Int, sec: Int) -> NSDate {
    let calendar = NSCalendar(calendarIdentifier: .gregorian)!
    let components = NSDateComponents()
    components.year = year
    components.month = month
    components.day = day
    components.hour = hr
    components.minute = min
    components.second = sec
    let date = calendar.date(from: components as DateComponents)
    return date! as NSDate
}
Run Code Online (Sandbox Code Playgroud)

如果我使用它,它将返回GMT日期.

override func viewDidLoad() {
    super.viewDidLoad()
    let d = makeDate(year: 2017, month: 1, day: 8, hr: 22, min: 16, …
Run Code Online (Sandbox Code Playgroud)

nsdate nscalendar nsdatecomponents swift3

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

使用AVPlayer播放流媒体视频

你如何播放流媒体视频AVPlayer

import Cocoa
import AVKit

class StreamViewController: NSViewController {
    var videoPlayer: AVPlayer!

    @IBOutlet weak var moviePlayerView: AVPlayerView!

    override func viewDidLoad() {
        super.viewDidLoad()        
    }

    override func viewWillAppear() {
        super.viewWillAppear()
    }

    override func viewDidAppear() {
        super.viewDidAppear()
        openStream()
    }

    func openStream() {
        completeOpenStream { (done) -> (Void) in
            if done {
                print("done!")
            }
        }
    }

    func completeOpenStream(completionHandler: @escaping (Bool) -> (Void)) -> Void  {
        DispatchQueue.global().async() {
            let urlString = "http://samples.mplayerhq.hu/V-codecs/h264/interlaced_crop.mp4" // You can open it with QuickTime.
            let url = URL(fileURLWithPath: …
Run Code Online (Sandbox Code Playgroud)

macos ios avplayer swift avkit

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

使用 NSBeep() 不会发出哔哔声

我从来没有用过NSBeep。我已经导入AppKit.framework到项目中。在 Xcode 8.2 和 Swift 3 下,我有

import AppKit

class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationWillFinishLaunching(_ notification: Notification) {
        NSBeep() 
    }
}
Run Code Online (Sandbox Code Playgroud)

而且没有哔哔声。我究竟做错了什么?谢谢。

macos cocoa appkit swift3

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

不使用 CGWindowListCreateImage 函数将桌面捕获为图像

多年来我一直使用该CGWindowListCreateImage功能来将桌面捕获为图像。在 Swift 中,我返回一个图像 ( NSImage),如下所示。

    func makeCGWindowImage(size: CGSize) -> NSImage? {
        if let imageRef = CGWindowListCreateImage(CGRect.infinite, .optionAll, kCGNullWindowID, .bestResolution) {
            let image = NSImage(cgImage: imageRef, size: size)
            return image
        }
        return nil
    }
Run Code Online (Sandbox Code Playgroud)

我需要使用该CGWindowListCreateImage功能来捕获桌面区域,不仅涉及我的应用程序本身,还涉及其他区域(文件夹窗口、Safari Web 浏览器窗口...)。问题是,如果我使用上面的窗口图像功能,我会收到有关屏幕录制隐私的警报消息。

在此输入图像描述

使用该功能最糟糕的部分CGWindowListCreateImage是审核者拒绝该应用程序,因为该应用程序不必要地显示隐私消息。如果我问审稿人屏幕录制隐私的用途是什么,他或她说这是为了制作视频,这对我来说听起来像是废话。审稿人建议我使用替代方案。我问过,但审稿人没有说这些替代方案是什么。那么,除了CGWindowListCreateImage捕获桌面区域的功能之外,是否还有其他方法,不仅涉及我的应用程序,还涉及其他窗口。

macos desktop screenshot swift macos-catalina

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

禁用菜单项

我的一本电子书解释了如何添加新的菜单项.嗯,这不是很难弄明白.要弄清楚如何将IBAction链接到新的菜单项也不难.但是本书和Google搜索结果并没有解释如何禁用菜单项.更具体地说,我想禁用"首选项"和"退出",具体取决于当前显示的窗口.如果应用程序当前显示"首选项"窗口,我想禁用这些菜单项.

在此输入图像描述

假设我有一个名为preferencesMenu的IBOutlet 然后我有

[preferencesMenu setEnabled:NO];
Run Code Online (Sandbox Code Playgroud)

,这不会禁用有问题的菜单项.那么如何禁用特定的菜单项呢?

感谢您的意见.

汤姆

macos objective-c

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

Swift - controlTextDidChange是否可以与NSTextView一起使用?

我有一个文本字段和一个textView.controlTextDidChange方法响应文本字段更改.但它没有回应textview的变化.

class AppDelegate: NSObject,NSApplicationDelegate,NSTextFieldDelegate,NSTextViewDelegate {
    func applicationWillFinishLaunching(notification:NSNotification) {
        /* delegates */
        textField.delegate = self
        textView.delegate = self    
    }

    override func controlTextDidChange(notification:NSNotification?) {
        if notification?.object as? NSTextField == textField {
            print("good")
        }
        else if notification?.object as? NSTextView == textView {
            print("nope")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Yosemite下运行Xcode 7.2.1.我做错了吗?

cocoa nstextview swift

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

将数据从 SwiftUI 视图传递到 UIViewController

我一直在测试SwiftUI,看看我能用它走多远。现在,我想知道是否可以将字符串从 SwiftUIView直接传递到UIViewController. 我想用 来显示这个字符串UILabelUILabel这就是我故事板上的全部内容。

以下是我的视图控制器(UIViewController)。

import UIKit
import SwiftUI

class HomeViewController: UIViewController {
    var message = String()

    @IBOutlet weak var messageLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        messageLabel.text = message
    }
}

struct HomeViewControllerRepresentation: UIViewControllerRepresentable {
    func makeUIViewController(context: UIViewControllerRepresentableContext<HomeViewControllerRepresentation>) -> HomeViewController {
        UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "homeViewController") as! HomeViewController
    }

    func updateUIViewController(_ uiViewController: HomeViewController, context: UIViewControllerRepresentableContext<HomeViewControllerRepresentation>) {

    }
}
Run Code Online (Sandbox Code Playgroud)

我的 …

storyboard uiviewcontroller ios swift swiftui

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

未选择的UITableView行列表

我有以下代码.

NSMutableArray *aList = [[NSMutableArray alloc] init];
for (NSIndexPath *indexPath in tableview1.indexPathsForSelectedRows) {
    NSString *r = [NSString stringWithFormat:@"%i",indexPath.row];
    [aList addObject:r];
}
Run Code Online (Sandbox Code Playgroud)

所以我得到的是一个选择的UITableView行列表.有没有得到一个简单的方法列表所行选择?

谢谢您的帮助.

objective-c uitableview nsmutablearray ios ios6

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