将NSEvent从Objective-C转换为Lua

时间:2016-10-05 08:46:08

标签: objective-c lua

我目前正在尝试使用Lua读取Apple制作的plist文件的内容,以便我可以使用它的值。

plist包含键盘快捷键,使用' modifierMask'。

通过逐个测试,我确定下面的modifierMask值与列出的修饰键匹配 - 但我不确定Apple究竟是如何计算掩码值的:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@color/white"
    tools:context="com.example.max.testcase.MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="loadSomething"
        android:padding="5sp"
        android:layout_marginTop="5sp"
        android:layout_marginBottom="5sp"
        android:textAlignment="center"
        android:text="Click here to load the site"
        android:textColor="@color/white"
        android:textSize="16sp"
        android:background="@color/blue"
        />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center_vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_gravity="center">
            <ImageButton
                android:id="@+id/icon1"
                android:onClick="method1"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:layout_marginTop="100sp"
                android:padding="20dp"
                android:paddingTop="50dp"
                android:adjustViewBounds="true"
                android:layout_gravity="left"
                android:gravity="center_horizontal"
                android:scaleType = "fitCenter"
                android:maxWidth="350dp"
                android:maxHeight="350dp"
                android:background="@color/white"
                android:src="@drawable/icon1" />

            <ImageButton
                android:id="@+id/icon2"
                android:onClick="method2"
                android:layout_width="0dp"
                android:layout_weight= "1"
                android:layout_height="wrap_content"
                android:layout_marginTop="100sp"
                android:padding="20dp"
                android:paddingTop="50dp"
                android:layout_gravity="right"
                android:gravity="center_horizontal"
                android:adjustViewBounds="true"
                android:maxWidth="350dp"
                android:maxHeight="350dp"
                android:scaleType="fitCenter"
                android:background="@color/white"
                android:src="@drawable/icon2"
                />
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

其他人建议修饰符掩码很可能与NSEvent modifier flags匹配,并提供以下Objective-C示例:

-- modifierMask = 131072    (shift)
-- modifierMask = 262144    (control)
-- modifierMask = 524288    (option)
-- modifierMask = 1048576   (command)           
-- modifierMask = 786432    (control + option)
-- modifierMask = 393216    (control + shift)
-- modifierMask = 1310720   (control + command)         
-- modifierMask = 1572864   (option + command)
-- modifierMask = 655360    (shift + option)
-- modifierMask = 1179648   (command + shift)
-- modifierMask = 917504    (control + shift + option)
-- modifierMask = 1703936   (option + command + shift)
-- modifierMask = 1835008   (control + option + command)

这看起来很有希望,但我对Objective-C一无所知,所以我只是想知道是否有人可以帮助我将这些Objective-C声明翻译成我可以在Lua中使用的东西?基本上我想创建一个输入modifierMask(即&#39; 131072&#39;)的Lua函数,并返回一个结果,告诉我modifierMask的含义(即&#39; shift&#39;)。有什么想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

已回答here

maskToTable = function(value)
local modifiers = {
    AlphaShift = 1 << 16,
    Shift      = 1 << 17,
    Control    = 1 << 18,
    Alternate  = 1 << 19,
    Command    = 1 << 20,
    NumericPad = 1 << 21,
    Help       = 1 << 22,
    Function   = 1 << 23,
}

local answer = {}

for k, v in pairs(modifiers) do
    if (value & v) == v then
        table.insert(answer, k)
    end
end

return answer
end