我有一个NSWindow
。使用NSWindowDelegate
,我可以处理windowWillMove()
和windowDidMove()
事件。windowWillMove()
被调用一次,就在窗口开始拖动时,这对于识别拖动的开始非常理想。
但是,windowDidMove()
即使用户仍在拖动窗口,只要窗口移动,它就会启动。如何识别用户已结束拖动,并且窗口现在处于最终位置?
我有一个NSWindow
。使用NSWindowDelegate
,我可以处理windowWillMove()
和windowDidMove()
事件。windowWillMove()
被调用一次,就在窗口开始拖动时,这对于识别拖动的开始非常理想。
但是,windowDidMove()
即使用户仍在拖动窗口,只要窗口移动,它就会启动。如何识别用户已结束拖动,并且窗口现在处于最终位置?
我正在 macOS 15.4 上使用 Xcode 16.1 编译一个应用程序。检查编译器生成的目标文件后,发现[abi:de180100]
其中附加了一些符号。这个后缀并不存在于 C++ 代码中。看来这个后缀也被附加到了一些其他符号和项目中。
我想了解更多关于后缀的信息,为什么需要后缀,以及它对它所修饰的符号有何影响。但是,我似乎找不到任何相关的文档。有人能指点我吗?
我可以构建 Skia,但无法链接查看器。
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
git clone https://github.com/google/skia.git
export PATH="$PWD/depot_tools:$PATH"
cd skia
python tools/git-sync-deps
bin/gn gen out/release --args="is_official_build=false skia_use_libjpeg_turbo_decode=false skia_use_libjpeg_turbo_encode=false extra_cflags_cc=[\"-frtti\"] target_cpu=\"arm64\""
ninja -C out/release skia
ninja -C out/release viewer
错误:
✦ ❯ ninja -C out/release viewer
ninja: Entering directory `out/release'
[1/1] link viewer
FAILED: viewer
c++ -Wl,-rpath,@loader_path/. -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -Wl,-w -target arm64-apple-macos11 @./viewer.rsp -framework ApplicationServices -framework OpenGL -framework AppKit -framework Foundation -framework QuartzCore -framework Cocoa -framework AVFoundation -ldl -o ./viewer
Undefined symbols for architecture arm64:
"SkJpegDecoder::Decode(sk_sp<SkData>, SkCodec::Result*, void*)", referenced from:
(anonymous namespace)::DataResourceProvider::loadImageAsset(char const*, char const*, char const*) const in libsvg.a[32](libsvg.SkSVGOpenTypeSVGDecoder.o)
"SkJpegDecoder::IsJpeg(void const*, unsigned long)", referenced from:
(anonymous namespace)::DataResourceProvider::loadImageAsset(char const*, char const*, char const*) const in libsvg.a[32](libsvg.SkSVGOpenTypeSVGDecoder.o)
"SkJpegEncoder::Encode(SkWStream*, SkPixmap const&, SkJpegEncoder::Options const&)", referenced from:
skiagm::EncodeGM::onDraw(SkCanvas*) in gm.encode.o
skiagm::encode_pixmap_and_make_image(SkPixmap const&, SkJpegEncoder::AlphaOption) in gm.encode_alpha_jpeg.o
encode_data(SkEncodedImageFormat, SkBitmap const&, int) in gm.encode_platform.o
skiagm::encode_data(SkBitmap const&, SkEncodedImageFormat) in gm.encode_srgb.o
new_texture_image_GM(SkCanvas*, SkString*)::$_2::operator()() const in gm.image.o
skiagm::ColorCubeGM::onOnceBeforeDraw() in gm.jpg_color_cube.o
make_image(GrRecordingContext*, skgpu::graphite::Recorder*) in gm.yuv420_odd_dim.o
...
ld: symbol(s) not found for architecture arm64
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
我的主 ContentView 包含一个 ChecklistView,ChecklistView 又包含几个 CheckView,CheckView 又包含一个 Toggle 视图。点击复选框时,信息会传递给 ContentViewModel,但不会返回到子视图。该如何解决这个问题?我使用的是 Xcode 16.3,Swift 5 和 Swift 6 版本没有区别。合并的代码旨在测试不同的视图声明结构。
import SwiftUI
@main
struct TestCheckListApp: App {
var body: some Scene {
WindowGroup {
ContentView(cvm: ContentViewModel())
}
}
}
import SwiftUI
final class ChecklistItem: Identifiable, ObservableObject
{
let id = UUID()
var title: String
var isChecked: Bool
init(title: String, isChecked: Bool = false) {
self.title = title
self.isChecked = isChecked
}
func toggle() { isChecked.toggle() }
}
import SwiftUI
final class ContentViewModel: ObservableObject {
@Published var report: String = ""
@Published var arrItem: [ChecklistItem] = [
ChecklistItem(title: "Item 0"),
ChecklistItem(title: "Item 1"),
ChecklistItem(title: "Item 2")
]
func buttonTapped()
{
var s: String = ""
for item in arrItem
{
s += "\(item.title) : \(item.isChecked), "
print("\(item.title) : \(item.isChecked)")
}
report = s
}
}
import SwiftUI
struct ContentView: View {
@ObservedObject var cvm: ContentViewModel
@State private var multiSelection = Set<UUID>()
var body: some View {
VStack(alignment: .leading) {
HStack {
Button(action: cvm.buttonTapped) {
Text("Display values in view model")
}
Text(cvm.report)
}
Divider()
HStack {
Text("Toggles in ContentView:")
Toggle(cvm.arrItem[0].title, isOn: $cvm.arrItem[0].isChecked)
Toggle(cvm.arrItem[1].title, isOn: $cvm.arrItem[1].isChecked)
Toggle(cvm.arrItem[2].title, isOn: $cvm.arrItem[2].isChecked)
}
Divider()
HStack {
Text("Toggles in CheckView in ContentView:")
CheckView(cli: cvm.arrItem[0])
CheckView(cli: cvm.arrItem[1])
CheckView(cli: cvm.arrItem[2])
}
Divider()
Text("Toggles in List in ContentView:")
List {
ForEach($cvm.arrItem) { item in
Toggle("item.title", isOn: item.isChecked) }
}
Divider()
Text("Toggles in ChecklistView:")
ChecklistView(cl: cvm.arrItem)
}
.padding()
.preferredColorScheme(.light)
}
}
#Preview {
ContentView(cvm: ContentViewModel())
}
import SwiftUI
struct CheckView: View {
@ObservedObject var cli: ChecklistItem
var body: some View {
Toggle(cli.title, isOn: $cli.isChecked)
}
}
#Preview {
CheckView(cli: ContentViewModel().arrItem[0])
}
import SwiftUI
struct ChecklistView : View {
var cl: [ChecklistItem]
var body: some View {
List {
ForEach(cl) { item in
CheckView(cli: item)
}
}
}
}
#Preview {
ChecklistView(cl: ContentViewModel().arrItem)
}
我可能忽略了一些显而易见的问题,但我找不到解决办法。我希望 List() 的高度有限,这样我就可以在里面滚动了。以下是示例代码:
struct TestView: View {
var items: [String] = [
"Item 1", "Item 2", "Item 3",
"Item 4", "Item 5", "Item 6",
"Item 7", "Item 8", "Item 9",
"Item 10"
]
@State var selected: String = "one"
var body: some View {
Form {
Section(header: Text("A section")) {
List(selection: $selected) {
ForEach(items, id: \.self) { item in
Text(item)
}
}
.frame(height: 100)
}
}
.formStyle(.grouped)
}
}
我原本以为 List 允许我在 100pt 高度内滚动,结果却直接被截断了,根本无法滚动。如果我把整个 List 包裹在 ScrollView 里,所有内容都会消失。
如何在明确限定的空间内实现列表的滚动?
我需要使用 AppleScript 打开屏幕截图应用程序。我有一台 Apple Mac mini M4。
我的代码没有任何反应。没有错误。
tell application "System Events"
keystroke "5" using {command down, shift down}
end tell
我无法访问在端口 4000 上运行的本地 NodeJS 服务器。我可以通过 chrome 以 http://localhost:4000 的形式访问该服务器,但无法通过 IP http://192.168.30.30:4000访问。我还尝试从 Android 模拟器访问本地 Web 服务器,但无法访问。
我已通过“设置”->“隐私”->“本地网络”允许 Chrome 和 Android Studio 访问本地网络。允许访问后,我重启了 Chrome 和 Android Studio。我还重启了我的 Mac。此外,我还清除了网络权限,以便可以按照https://forums.macrumors.com/threads/local-network-access-nightmare.2448144/?post=33698401#post-33698401的说明进行重置。
要重置本地网络权限,请从恢复中的终端删除 /Library/Preferences/com.apple.networkextension.plist
rm "/Volumes/Macintosh HD/Library/Preferences/com.apple.networkextension.plist"
这确实重置了权限,以便我可以再次授予,但我仍然无法通过 IP 访问服务器。
我已阅读了大量有关 Sequoia 和无法通过 IP 访问本地服务器的帖子,但我仍然无法成功修复此问题。
有人还有其他我可以尝试的想法吗?
编辑:
我尝试通过几种方式启动我的节点服务器:
server.listen(4000, 0.0.0.0, () => {...
和
server.listen(4000, 127.0.0.1, () => {...
我知道删除 plist 文件的语法并不完美,只是知道我能够删除并适当地提升了 chrome 和 android 上的本地网络访问,并且确实接受了
我正在尝试在 macOS 15.2 (Sequoia) 上构建 x265。我按照 wiki 上的 Linux 说明操作,但失败了(CMake 版本 3.31.4):
linux % make
[ 1%] Building ASM_NASM object common/CMakeFiles/common.dir/x86/pixel-a.asm.o
[ 2%] Building ASM_NASM object common/CMakeFiles/common.dir/x86/const-a.asm.o
[ 3%] Building ASM_NASM object common/CMakeFiles/common.dir/x86/cpu-a.asm.o
/x265_git/source/common/x86/cpu-a.asm:181: error: symbol `..plt' not defined
/x265_git/source/common/../common/x86/x86inc.asm:1095: ... from macro `call' defined here
make[2]: *** [common/CMakeFiles/common.dir/x86/cpu-a.asm.o] Error 1
make[1]: *** [common/CMakeFiles/common.dir/all] Error 2
make: *** [all] Error 2
我尝试运行build/xcode/make-project.sh
,但也失败了:
-- Configuring done (25.6s)
CMake Error in CMakeLists.txt:
The custom command generating
/x265_git/build/xcode/pixel-a.asm.o
is attached to multiple targets:
cli
x265-static
x265-shared
but none of these is a common dependency of the other(s). This is not
allowed by the Xcode "new build system".
-- Generating done (0.0s)
CMake Generate step failed. Build files cannot be regenerated correctly.
我已经在旧版本的 macOS 上成功构建了 x265。我在 2023 年 8 月安装的 macOS 13 (Ventura) 版本显示:
% x265 --version
x265 [info]: HEVC encoder version 3.5+103-8f18e3ad3
x265 [info]: build info [Mac OS X][clang 14.0.3][64 bit] 10bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
这完全超出了我的技术专长水平。我能做些什么来让它工作吗?还是说在这个版本的 macOS (15.2 Sequoia) 上根本无法实现?
我的情况和这篇文章的一样……
https://users.rust-lang.org/t/running-rust-app-without-showing-the-terminal/41859
... 上面链接中的发帖者可以在 Windows 中运行 Rust 二进制文件,但随着二进制文件的打开,终端窗口也会打开。在那篇文章中,有人提到了一种解决方法,确实有帮助。
在我的 Mac M1 上,我使用以下方法编译 Rust 二进制文件...
cargo build --target aarch64-apple-darwin --release
...二进制 GUI 打开得很好,但终端也显示了出来。
如何防止终端打开?