- new on-screen widget tool UI with movable widget panel

with iOS12 compatibility
This commit is contained in:
TrueZhuanjia committed 2025-06-09 20:28:41 +08:00
1 parent fabd01ca9e
commit 8e00552c61
10 files changed
+678 -492

No files matched your search

+218 -88
View File
@@ -3,6 +3,7 @@
<device id="ipad11_0rounded" orientation="portrait" layout="fullscreen" appearance="light"/> <device id="ipad11_0rounded" orientation="portrait" layout="fullscreen" appearance="light"/>
<dependencies> <dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
<capability name="Image references" minToolsVersion="12.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<scenes> <scenes>
@@ -954,25 +955,28 @@ ICAgICAgICAgICAgICA
<viewControllerLayoutGuide type="top" id="O1f-cu-KVo"/> <viewControllerLayoutGuide type="top" id="O1f-cu-KVo"/>
<viewControllerLayoutGuide type="bottom" id="eaS-aj-VtA"/> <viewControllerLayoutGuide type="bottom" id="eaS-aj-VtA"/>
</layoutGuides> </layoutGuides>
<view key="view" opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="Acw-S4-f8a"> <view key="view" contentMode="scaleToFill" id="Acw-S4-f8a">
<rect key="frame" x="0.0" y="0.0" width="1300" height="1194"/> <rect key="frame" x="0.0" y="0.0" width="1300" height="1194"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<view alpha="0.75" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fZU-G0-fgM" userLabel="Toolbar Root View" customClass="ToolBarContainerView"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fZU-G0-fgM" userLabel="Toolbar Root View" customClass="ToolBarContainerView">
<rect key="frame" x="0.0" y="24" width="1300" height="50"/> <rect key="frame" x="0.0" y="24" width="1300" height="50"/>
<subviews> <subviews>
<stackView autoresizesSubviews="NO" opaque="NO" contentMode="scaleToFill" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="YLK-IE-ajS"> <stackView autoresizesSubviews="NO" contentMode="scaleToFill" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="YLK-IE-ajS">
<rect key="frame" x="235" y="0.0" width="830" height="50"/> <rect key="frame" x="235" y="0.0" width="830" height="50"/>
<subviews> <subviews>
<button opaque="NO" tag="20" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qJs-n8-eV7" userLabel="Trash"> <button opaque="NO" tag="20" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qJs-n8-eV7" userLabel="Trash">
<rect key="frame" x="0.0" y="0.0" width="50" height="50"/> <rect key="frame" x="0.0" y="0.0" width="50" height="50"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="50" id="0UR-Tv-X69"/> <constraint firstAttribute="height" constant="50" id="0UR-Tv-X69"/>
<constraint firstAttribute="width" constant="50" id="MyN-Qt-jL7"/> <constraint firstAttribute="width" constant="50" id="MyN-Qt-jL7"/>
</constraints> </constraints>
<color key="tintColor" red="0.6705882353" green="0.61568627450000002" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="tintColor" systemColor="systemTealColor"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="Trash"/> <state key="normal">
<color key="titleColor" red="0.34534250659999999" green="0.68327885720000003" blue="0.76859849690000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<imageReference key="image" image="trash.fill" catalog="system" symbolScale="large"/>
</state>
<connections> <connections>
<action selector="trashCanTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="6s3-Wc-6us"/> <action selector="trashCanTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="6s3-Wc-6us"/>
</connections> </connections>
@@ -983,22 +987,31 @@ ICAgICAgICAgICAgICA
<constraint firstAttribute="width" constant="50" id="9OY-7z-dfc"/> <constraint firstAttribute="width" constant="50" id="9OY-7z-dfc"/>
<constraint firstAttribute="height" constant="50" id="AIZ-4k-ob1"/> <constraint firstAttribute="height" constant="50" id="AIZ-4k-ob1"/>
</constraints> </constraints>
<color key="tintColor" red="0.6705882353" green="0.61568627450000002" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="tintColor" systemColor="systemTealColor"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="ArrowBackward"/> <state key="normal">
<color key="titleColor" red="0.34534250659999999" green="0.68327885720000003" blue="0.76859849690000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<color key="titleShadowColor" systemColor="systemTealColor"/>
<imageReference key="image" image="arrow.uturn.backward" catalog="system" symbolScale="large"/>
</state>
<connections> <connections>
<action selector="undoTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="54z-kO-oCo"/> <action selector="undoTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="54z-kO-oCo"/>
</connections> </connections>
</button> </button>
<button autoresizesSubviews="NO" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uda-zt-xrG" userLabel="Save"> <button autoresizesSubviews="NO" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uda-zt-xrG" userLabel="Save">
<rect key="frame" x="240" y="0.0" width="50" height="50"/> <rect key="frame" x="240" y="0.0" width="50" height="50"/>
<accessibility key="accessibilityConfiguration" identifier="saveButton"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="50" id="TEB-dw-YGo"/> <constraint firstAttribute="width" constant="50" id="TEB-dw-YGo"/>
<constraint firstAttribute="height" constant="50" id="z50-CE-W0m"/> <constraint firstAttribute="height" constant="50" id="z50-CE-W0m"/>
</constraints> </constraints>
<color key="tintColor" red="0.6705882353" green="0.61568627450000002" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="tintColor" systemColor="systemTealColor"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="SquareAndArrowDown"/> <state key="normal">
<color key="titleColor" red="0.34534250659999999" green="0.68327885720000003" blue="0.76859849690000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<color key="titleShadowColor" systemColor="systemTealColor"/>
<imageReference key="image" image="square.and.arrow.down.fill" catalog="system" symbolScale="large"/>
</state>
<connections> <connections>
<action selector="saveTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="bUV-Ja-Htd"/> <action selector="saveTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="bUV-Ja-Htd"/>
</connections> </connections>
@@ -1012,9 +1025,12 @@ ICAgICAgICAgICAgICA
<constraint firstAttribute="width" constant="50" id="XlA-qH-mSO"/> <constraint firstAttribute="width" constant="50" id="XlA-qH-mSO"/>
<constraint firstAttribute="height" constant="50" id="xSe-dW-zjg"/> <constraint firstAttribute="height" constant="50" id="xSe-dW-zjg"/>
</constraints> </constraints>
<color key="tintColor" red="0.6705882353" green="0.61568627450000002" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="tintColor" systemColor="systemTealColor"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="SquaresArrowUp"/> <state key="normal">
<color key="titleColor" red="0.34534250659999999" green="0.68327885720000003" blue="0.76859849690000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<imageReference key="image" image="tray.full.fill" catalog="system" symbolScale="large"/>
</state>
<connections> <connections>
<action selector="loadTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="ZCn-S3-8em"/> <action selector="loadTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="ZCn-S3-8em"/>
</connections> </connections>
@@ -1024,30 +1040,35 @@ ICAgICAgICAgICAgICA
<constraint firstAttribute="width" constant="50" id="G6V-W8-Ech"/> <constraint firstAttribute="width" constant="50" id="G6V-W8-Ech"/>
</constraints> </constraints>
</stackView> </stackView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fKN-ja-TRi" userLabel="Add"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fKN-ja-TRi" userLabel="Add">
<rect key="frame" x="480" y="0.0" width="50" height="50"/> <rect key="frame" x="480" y="0.0" width="50" height="50"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="50" id="g75-DA-uPz"/> <constraint firstAttribute="width" constant="50" id="g75-DA-uPz"/>
<constraint firstAttribute="height" constant="50" id="nJF-Od-j7Y"/> <constraint firstAttribute="height" constant="50" id="nJF-Od-j7Y"/>
</constraints> </constraints>
<fontDescription key="fontDescription" type="boldSystem" pointSize="23"/> <color key="tintColor" systemColor="systemTealColor"/>
<color key="tintColor" red="0.6705882353" green="0.61568627450000002" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="Add"/> <state key="normal">
<color key="titleColor" red="0.34534250659404359" green="0.68327885717542713" blue="0.76859849691390991" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<imageReference key="image" image="plus.rectangle.fill.on.rectangle.fill" catalog="system" symbolScale="large"/>
</state>
<connections> <connections>
<action selector="addTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="y4c-PU-rbS"/> <action selector="addTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="y4c-PU-rbS"/>
</connections> </connections>
</button> </button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="R45-lM-YPl"> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="R45-lM-YPl" userLabel="Edit">
<rect key="frame" x="600" y="0.0" width="230" height="50"/> <rect key="frame" x="600" y="0.0" width="230" height="50"/>
<constraints> <constraints>
<constraint firstAttribute="height" constant="50" id="SpF-xI-pOI"/> <constraint firstAttribute="height" constant="50" id="SpF-xI-pOI"/>
<constraint firstAttribute="width" constant="50" id="p01-nF-Ee8"/> <constraint firstAttribute="width" constant="50" id="p01-nF-Ee8"/>
</constraints> </constraints>
<fontDescription key="fontDescription" type="boldSystem" pointSize="23"/> <color key="tintColor" systemColor="systemTealColor"/>
<color key="tintColor" red="0.6705882353" green="0.61568627450000002" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="Edit"/> <state key="normal">
<color key="titleColor" red="0.34534250659999999" green="0.68327885720000003" blue="0.76859849690000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<imageReference key="image" image="pencil.and.ellipsis.rectangle" catalog="system" symbolScale="large"/>
<preferredSymbolConfiguration key="preferredSymbolConfiguration" weight="heavy"/>
</state>
<connections> <connections>
<action selector="editTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="hfu-ay-iKZ"/> <action selector="editTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="hfu-ay-iKZ"/>
</connections> </connections>
@@ -1059,15 +1080,15 @@ ICAgICAgICAgICAgICA
<constraint firstAttribute="width" constant="830" id="zzS-yc-O4H"/> <constraint firstAttribute="width" constant="830" id="zzS-yc-O4H"/>
</constraints> </constraints>
</stackView> </stackView>
<view alpha="0.89999997615814209" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hKp-ds-86I" userLabel="Chevron View"> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hKp-ds-86I" userLabel="Chevron View">
<rect key="frame" x="624" y="50" width="52" height="30"/> <rect key="frame" x="624" y="50" width="52" height="30"/>
<subviews> <subviews>
<imageView clipsSubviews="YES" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ChevronCompactUp" translatesAutoresizingMaskIntoConstraints="NO" id="iVZ-Fd-dY7"> <imageView clipsSubviews="YES" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ChevronCompactUp" translatesAutoresizingMaskIntoConstraints="NO" id="iVZ-Fd-dY7">
<rect key="frame" x="0.0" y="0.0" width="52" height="30"/> <rect key="frame" x="0.0" y="0.0" width="52" height="30"/>
<color key="tintColor" red="0.6705882353" green="0.61568627450000002" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="tintColor" systemColor="systemTealColor"/>
</imageView> </imageView>
</subviews> </subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" red="0.94936420777121278" green="0.95374688698857357" blue="0.96689492464065552" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<constraints> <constraints>
<constraint firstItem="iVZ-Fd-dY7" firstAttribute="leading" secondItem="hKp-ds-86I" secondAttribute="leading" id="2Qy-bj-bTl"/> <constraint firstItem="iVZ-Fd-dY7" firstAttribute="leading" secondItem="hKp-ds-86I" secondAttribute="leading" id="2Qy-bj-bTl"/>
<constraint firstAttribute="trailing" secondItem="iVZ-Fd-dY7" secondAttribute="trailing" id="2tP-Fu-4h8"/> <constraint firstAttribute="trailing" secondItem="iVZ-Fd-dY7" secondAttribute="trailing" id="2tP-Fu-4h8"/>
@@ -1083,16 +1104,19 @@ ICAgICAgICAgICAgICA
<constraint firstAttribute="width" constant="50" id="qtH-gP-Fjj"/> <constraint firstAttribute="width" constant="50" id="qtH-gP-Fjj"/>
<constraint firstAttribute="height" constant="50" id="tqU-Lh-NQA"/> <constraint firstAttribute="height" constant="50" id="tqU-Lh-NQA"/>
</constraints> </constraints>
<color key="tintColor" red="0.6705882353" green="0.61568627450000002" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="tintColor" systemColor="systemTealColor"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="OSCLayoutExit"/> <state key="normal">
<color key="titleColor" red="0.34534250659999999" green="0.68327885720000003" blue="0.76859849690000004" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<imageReference key="image" image="arrow.left.square.fill" catalog="system" symbolScale="large"/>
</state>
<connections> <connections>
<action selector="closeTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="sc6-Mq-rbQ"/> <action selector="closeTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="sc6-Mq-rbQ"/>
<action selector="undoTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="d4b-0R-vJU"/> <action selector="undoTapped:" destination="xSZ-i2-Jts" eventType="touchUpInside" id="d4b-0R-vJU"/>
</connections> </connections>
</button> </button>
</subviews> </subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" red="0.94936420777121278" green="0.95374688698857357" blue="0.96689492464065552" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<constraints> <constraints>
<constraint firstItem="YLK-IE-ajS" firstAttribute="top" secondItem="fZU-G0-fgM" secondAttribute="top" id="OYa-IQ-RFJ"/> <constraint firstItem="YLK-IE-ajS" firstAttribute="top" secondItem="fZU-G0-fgM" secondAttribute="top" id="OYa-IQ-RFJ"/>
<constraint firstItem="hKp-ds-86I" firstAttribute="top" secondItem="YLK-IE-ajS" secondAttribute="bottom" id="RRf-mC-xx8"/> <constraint firstItem="hKp-ds-86I" firstAttribute="top" secondItem="YLK-IE-ajS" secondAttribute="bottom" id="RRf-mC-xx8"/>
@@ -1102,53 +1126,140 @@ ICAgICAgICAgICAgICA
<constraint firstItem="YLK-IE-ajS" firstAttribute="centerX" secondItem="fZU-G0-fgM" secondAttribute="centerX" id="xm7-a0-8G7"/> <constraint firstItem="YLK-IE-ajS" firstAttribute="centerX" secondItem="fZU-G0-fgM" secondAttribute="centerX" id="xm7-a0-8G7"/>
</constraints> </constraints>
</view> </view>
<slider hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.59999999999999998" maxValue="6" id="Efn-Si-TPp" userLabel="Widget Size Slider"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="z5Q-bW-WQ8" userLabel="widgetPanelStack">
<rect key="frame" x="205" y="87" width="420" height="31"/> <rect key="frame" x="325" y="156" width="650" height="237"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <subviews>
<color key="backgroundColor" systemColor="secondaryLabelColor"/> <label opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Profile:" textAlignment="center" lineBreakMode="tailTruncation" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iel-xl-xd9">
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <rect key="frame" x="0.0" y="0.0" width="650" height="37"/>
</slider> <color key="backgroundColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<slider hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.59999999999999998" maxValue="6" id="ZOF-sL-e7p" userLabel="Widget Height Slider"> <color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<rect key="frame" x="205" y="122" width="420" height="31"/> <constraints>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <constraint firstAttribute="height" constant="37" id="I1r-yi-gMR"/>
<color key="backgroundColor" systemColor="secondaryLabelColor"/> <constraint firstAttribute="width" constant="650" id="mng-D1-wS3"/>
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </constraints>
</slider> <fontDescription key="fontDescription" type="system" pointSize="20"/>
<slider hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.83299999999999996" minValue="0.001" maxValue="0.999" id="ZLL-pE-iZh" userLabel="Widget Alpha Slider"> <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<rect key="frame" x="205" y="157" width="217" height="31"/> <nil key="highlightedColor"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> </label>
<color key="backgroundColor" systemColor="secondaryLabelColor"/> <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GOp-1e-oUF" userLabel="widgetSizeStack">
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <rect key="frame" x="0.0" y="47" width="650" height="30"/>
</slider> <subviews>
<slider hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.0" maxValue="8" id="FRZ-xP-x2r"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="test" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZuV-4A-0Zb" userLabel="widgetSizeLabel">
<rect key="frame" x="205" y="192" width="591" height="31"/> <rect key="frame" x="0.0" y="0.0" width="170" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <constraints>
<color key="backgroundColor" systemColor="secondaryLabelColor"/> <constraint firstAttribute="width" constant="170" id="vaE-Tf-vep"/>
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </constraints>
</slider> <fontDescription key="fontDescription" type="system" pointSize="17"/>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Profile:" textAlignment="center" lineBreakMode="tailTruncation" adjustsFontSizeToFit="NO" id="cRV-Xw-CVi"> <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<rect key="frame" x="631" y="87" width="163" height="67"/> <nil key="highlightedColor"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> </label>
<color key="backgroundColor" red="0.38551661729999998" green="0.28289704380000003" blue="0.61853601300000005" alpha="0.28999999999999998" colorSpace="custom" customColorSpace="sRGB"/> <slider clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.60000002384185791" maxValue="6" translatesAutoresizingMaskIntoConstraints="NO" id="Xzq-VC-hP3" userLabel="Size Slider">
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <rect key="frame" x="168" y="0.0" width="484" height="31"/>
<fontDescription key="fontDescription" type="system" pointSize="28"/> <color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/> </slider>
</label> </subviews>
<slider hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="120" minValue="0.0" maxValue="350" id="oc7-kh-RVH"> </stackView>
<rect key="frame" x="205" y="227" width="591" height="31"/> <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9Zz-kb-7Ej" userLabel="widgetHeightStack">
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <rect key="frame" x="0.0" y="87" width="650" height="30"/>
<color key="backgroundColor" systemColor="secondaryLabelColor"/> <subviews>
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="test" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sbd-0j-KWS" userLabel="widgetHeightLabel">
</slider> <rect key="frame" x="0.0" y="0.0" width="170" height="30"/>
<slider hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="0.0" maxValue="8" id="CCy-fw-7og" userLabel="Widget Border Width Slider"> <constraints>
<rect key="frame" x="590" y="157" width="206" height="31"/> <constraint firstAttribute="width" constant="170" id="0Ce-y1-K5s"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> </constraints>
<color key="backgroundColor" systemColor="secondaryLabelColor"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</slider> <nil key="highlightedColor"/>
</label>
<slider clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.60000002384185791" maxValue="6" translatesAutoresizingMaskIntoConstraints="NO" id="aZp-Dq-RTr" userLabel="Height Slider">
<rect key="frame" x="168" y="0.0" width="484" height="31"/>
<color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</slider>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="9ZS-28-txW" userLabel="borderWidthAlphaStack">
<rect key="frame" x="0.0" y="127" width="650" height="30"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="test" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pwa-YK-6Q2" userLabel="widgetAlphaLabel">
<rect key="frame" x="0.0" y="0.0" width="170" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="170" id="1ru-Nd-cf4"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<slider clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.83300000429153442" minValue="0.0010000000474974513" maxValue="0.99900001287460327" translatesAutoresizingMaskIntoConstraints="NO" id="ii1-Iq-jI4" userLabel="Alpha Slider">
<rect key="frame" x="173" y="0.0" width="169" height="31"/>
<color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="165" id="tRM-SO-nlr"/>
</constraints>
<color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</slider>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="test" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="r8L-dl-yLZ" userLabel="widgetBorderLabel">
<rect key="frame" x="345" y="0.0" width="170" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="170" id="ZWS-S0-FRB"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<slider clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="0.0" maxValue="8" translatesAutoresizingMaskIntoConstraints="NO" id="aOV-38-CQt" userLabel="Widget Border Width Slider">
<rect key="frame" x="518" y="0.0" width="134" height="31"/>
<color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</slider>
</subviews>
</stackView>
<stackView contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="zfD-bd-GEN" userLabel="stickIndicatorOffsetStack">
<rect key="frame" x="0.0" y="167" width="650" height="30"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="test" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tG7-oX-P9b" userLabel="stickIndicatorOffsetLabel">
<rect key="frame" x="0.0" y="0.0" width="170" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="170" id="Am2-6L-a26"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<slider clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="120" minValue="0.0" maxValue="350" translatesAutoresizingMaskIntoConstraints="NO" id="aPX-7o-N3l">
<rect key="frame" x="173" y="0.0" width="479" height="31"/>
<color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</slider>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="80D-qe-E5D" userLabel="sensitivityFactorStack">
<rect key="frame" x="0.0" y="207" width="650" height="30"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="test" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vJs-pg-hHe" userLabel="sensitivityFactorLabel">
<rect key="frame" x="0.0" y="0.0" width="170" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="170" id="pI1-IG-YhP"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<slider clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.0" maxValue="8" translatesAutoresizingMaskIntoConstraints="NO" id="DiG-XX-r8c">
<rect key="frame" x="168" y="0.0" width="484" height="31"/>
<color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</slider>
</subviews>
</stackView>
</subviews>
<constraints>
<constraint firstAttribute="width" constant="650" id="Rav-Dp-9pI"/>
</constraints>
</stackView>
</subviews> </subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints> <constraints>
<constraint firstAttribute="trailing" secondItem="fZU-G0-fgM" secondAttribute="trailing" id="6wU-vF-mZw"/> <constraint firstAttribute="trailing" secondItem="fZU-G0-fgM" secondAttribute="trailing" id="6wU-vF-mZw"/>
<constraint firstItem="fZU-G0-fgM" firstAttribute="leading" secondItem="Acw-S4-f8a" secondAttribute="leading" id="DVc-cD-qO0"/> <constraint firstItem="fZU-G0-fgM" firstAttribute="leading" secondItem="Acw-S4-f8a" secondAttribute="leading" id="DVc-cD-qO0"/>
@@ -1159,25 +1270,42 @@ ICAgICAgICAgICAgICA
<simulatedToolbarMetrics key="simulatedBottomBarMetrics"/> <simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
<size key="freeformSize" width="1300" height="1194"/> <size key="freeformSize" width="1300" height="1194"/>
<connections> <connections>
<outlet property="addButton" destination="fKN-ja-TRi" id="R2n-QF-aSj"/>
<outlet property="borderWidthAlphaStack" destination="9ZS-28-txW" id="qxV-2E-g8m"/>
<outlet property="chevronImageView" destination="iVZ-Fd-dY7" id="403-Nj-wRx"/> <outlet property="chevronImageView" destination="iVZ-Fd-dY7" id="403-Nj-wRx"/>
<outlet property="chevronView" destination="hKp-ds-86I" id="Og9-aT-zNH"/> <outlet property="chevronView" destination="hKp-ds-86I" id="Og9-aT-zNH"/>
<outlet property="currentProfileLabel" destination="cRV-Xw-CVi" id="Zrb-zn-ptp"/> <outlet property="currentProfileLabel" destination="iel-xl-xd9" id="PJ0-FX-z6w"/>
<outlet property="sensitivityFactorSlider" destination="FRZ-xP-x2r" id="Vah-oh-eMp"/> <outlet property="editButton" destination="R45-lM-YPl" id="DNS-7N-3Kh"/>
<outlet property="stickIndicatorOffsetSlider" destination="oc7-kh-RVH" id="f5k-n0-7DM"/> <outlet property="exitButton" destination="7bp-Wn-j9n" id="Kku-3T-RSO"/>
<outlet property="loadButton" destination="OId-gk-Wkg" id="adP-54-1ir"/>
<outlet property="saveButton" destination="uda-zt-xrG" id="FyB-WY-rri"/>
<outlet property="sensitivityLabel" destination="vJs-pg-hHe" id="RRw-Zq-LUa"/>
<outlet property="sensitivitySlider" destination="DiG-XX-r8c" id="fz5-Et-1WV"/>
<outlet property="sensitivityStack" destination="80D-qe-E5D" id="Qx6-UY-Hhj"/>
<outlet property="stickIndicatorOffsetLabel" destination="tG7-oX-P9b" id="jBx-ii-091"/>
<outlet property="stickIndicatorOffsetSlider" destination="aPX-7o-N3l" id="gLv-c3-3JG"/>
<outlet property="stickIndicatorOffsetStack" destination="zfD-bd-GEN" id="oeb-Vk-2mw"/>
<outlet property="toolbarRootView" destination="fZU-G0-fgM" id="txP-M2-GKi"/> <outlet property="toolbarRootView" destination="fZU-G0-fgM" id="txP-M2-GKi"/>
<outlet property="toolbarStackView" destination="YLK-IE-ajS" id="j4o-Kp-7Z8"/> <outlet property="toolbarStackView" destination="YLK-IE-ajS" id="j4o-Kp-7Z8"/>
<outlet property="toolbarTopConstraintiPad" destination="Ppb-J1-lXg" id="laN-Zh-lHm"/> <outlet property="toolbarTopConstraintiPad" destination="Ppb-J1-lXg" id="laN-Zh-lHm"/>
<outlet property="trashCanButton" destination="qJs-n8-eV7" id="ubK-qm-Cox"/> <outlet property="trashCanButton" destination="qJs-n8-eV7" id="ubK-qm-Cox"/>
<outlet property="undoButton" destination="F7X-l4-cl3" id="vAI-XQ-hZw"/> <outlet property="undoButton" destination="F7X-l4-cl3" id="vAI-XQ-hZw"/>
<outlet property="widgetAlphaSlider" destination="ZLL-pE-iZh" id="5OX-P6-YKt"/> <outlet property="widgetAlphaLabel" destination="Pwa-YK-6Q2" id="IPF-Es-yTr"/>
<outlet property="widgetBorderWidthSlider" destination="CCy-fw-7og" id="wio-Ly-MMR"/> <outlet property="widgetAlphaSlider" destination="ii1-Iq-jI4" id="Rev-dn-n3F"/>
<outlet property="widgetHeightSlider" destination="ZOF-sL-e7p" id="OHK-5i-3RY"/> <outlet property="widgetBorderWidthLabel" destination="r8L-dl-yLZ" id="gmo-Fh-btQ"/>
<outlet property="widgetSizeSlider" destination="Efn-Si-TPp" id="CgK-cC-Yo0"/> <outlet property="widgetBorderWidthSlider" destination="aOV-38-CQt" id="Azt-Da-IN6"/>
<outlet property="widgetHeightLabel" destination="sbd-0j-KWS" id="Wxu-LV-GrE"/>
<outlet property="widgetHeightSlider" destination="aZp-Dq-RTr" id="7Nk-BH-kWR"/>
<outlet property="widgetHeightStack" destination="9Zz-kb-7Ej" id="ivF-gI-Ljw"/>
<outlet property="widgetPanelStack" destination="z5Q-bW-WQ8" id="AMp-OC-LsJ"/>
<outlet property="widgetSizeLabel" destination="ZuV-4A-0Zb" id="Nr8-Wg-POM"/>
<outlet property="widgetSizeSlider" destination="Xzq-VC-hP3" id="lW5-0R-s5U"/>
<outlet property="widgetSizeStack" destination="z5Q-bW-WQ8" id="pc5-Cm-OYY"/>
</connections> </connections>
</viewController> </viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dev-Ck-vTF" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> <placeholder placeholderIdentifier="IBFirstResponder" id="dev-Ck-vTF" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects> </objects>
<point key="canvasLocation" x="2699.2805755395684" y="1067.8391959798996"/> <point key="canvasLocation" x="2699.2805755395684" y="1067.6033057851239"/>
</scene> </scene>
<!--Profiles Table View Controller--> <!--Profiles Table View Controller-->
<scene sceneID="W0E-wz-n2b"> <scene sceneID="W0E-wz-n2b">
@@ -1260,23 +1388,25 @@ ICAgICAgICAgICAgICA
</scene> </scene>
</scenes> </scenes>
<resources> <resources>
<image name="ArrowBackward" width="40" height="40"/>
<image name="ChevronCompactUp" width="35" height="10"/> <image name="ChevronCompactUp" width="35" height="10"/>
<image name="OSCLayoutExit" width="40" height="40"/> <image name="arrow.left.square.fill" catalog="system" width="128" height="114"/>
<image name="SquareAndArrowDown" width="40" height="40"/> <image name="arrow.uturn.backward" catalog="system" width="128" height="113"/>
<image name="SquaresArrowUp" width="40" height="40"/> <image name="pencil.and.ellipsis.rectangle" catalog="system" width="128" height="85"/>
<image name="Trash" width="40" height="40"/> <image name="plus.rectangle.fill.on.rectangle.fill" catalog="system" width="128" height="102"/>
<image name="square.and.arrow.down.fill" catalog="system" width="121" height="128"/>
<image name="trash.fill" catalog="system" width="117" height="128"/>
<image name="tray.full.fill" catalog="system" width="128" height="88"/>
<systemColor name="linkColor"> <systemColor name="linkColor">
<color red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor> </systemColor>
<systemColor name="secondaryLabelColor">
<color red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor>
<systemColor name="systemBackgroundColor"> <systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor> </systemColor>
<systemColor name="systemBrownColor"> <systemColor name="systemBrownColor">
<color red="0.63529411759999999" green="0.51764705879999995" blue="0.36862745099999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color red="0.63529411759999999" green="0.51764705879999995" blue="0.36862745099999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor> </systemColor>
<systemColor name="systemTealColor">
<color red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor>
</resources> </resources>
</document> </document>
+3 -4
View File
@@ -2,7 +2,6 @@
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="DL0-L5-LOv"> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="DL0-L5-LOv">
<device id="retina6_1" orientation="portrait" appearance="light"/> <device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies> <dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -13,7 +12,7 @@
<objects> <objects>
<viewController id="dgh-JZ-Q7z" customClass="MainFrameViewController" sceneMemberID="viewController"> <viewController id="dgh-JZ-Q7z" customClass="MainFrameViewController" sceneMemberID="viewController">
<collectionView key="view" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" id="Rtu-AT-Alw" customClass="AppCollectionView"> <collectionView key="view" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" id="Rtu-AT-Alw" customClass="AppCollectionView">
<rect key="frame" x="0.0" y="0.0" width="414" height="756"/> <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.3333333432674408" green="0.3333333432674408" blue="0.3333333432674408" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="backgroundColor" red="0.3333333432674408" green="0.3333333432674408" blue="0.3333333432674408" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="15" minimumInteritemSpacing="15" id="YcZ-cR-3tK"> <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="15" minimumInteritemSpacing="15" id="YcZ-cR-3tK">
@@ -926,7 +925,7 @@ ICAgICAgICAgICAgIA
<outlet property="chevronImageView" destination="76O-3K-aa8" id="yGv-fM-Ohf"/> <outlet property="chevronImageView" destination="76O-3K-aa8" id="yGv-fM-Ohf"/>
<outlet property="chevronView" destination="Zll-IP-PFt" id="MGR-C0-h57"/> <outlet property="chevronView" destination="Zll-IP-PFt" id="MGR-C0-h57"/>
<outlet property="currentProfileLabel" destination="yJC-bq-EOU" id="6Sn-El-zPG"/> <outlet property="currentProfileLabel" destination="yJC-bq-EOU" id="6Sn-El-zPG"/>
<outlet property="sensitivityFactorSlider" destination="QXI-Ex-JNV" id="cH9-Ir-LIZ"/> <outlet property="sensitivitySlider" destination="QXI-Ex-JNV" id="cH9-Ir-LIZ"/>
<outlet property="stickIndicatorOffsetSlider" destination="OaL-Ph-J4n" id="uF3-7W-mdG"/> <outlet property="stickIndicatorOffsetSlider" destination="OaL-Ph-J4n" id="uF3-7W-mdG"/>
<outlet property="toolbarRootView" destination="Jnu-63-bcf" id="Y17-e2-18R"/> <outlet property="toolbarRootView" destination="Jnu-63-bcf" id="Y17-e2-18R"/>
<outlet property="toolbarStackView" destination="4he-pe-kYB" id="eVm-jM-dcv"/> <outlet property="toolbarStackView" destination="4he-pe-kYB" id="eVm-jM-dcv"/>
@@ -1030,7 +1029,7 @@ ICAgICAgICAgICAgIA
<image name="SquaresArrowUp" width="40" height="40"/> <image name="SquaresArrowUp" width="40" height="40"/>
<image name="Trash" width="40" height="40"/> <image name="Trash" width="40" height="40"/>
<systemColor name="secondaryLabelColor"> <systemColor name="secondaryLabelColor">
<color red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> <color red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor> </systemColor>
<systemColor name="systemBackgroundColor"> <systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@@ -34,7 +34,7 @@
- (id) initWithView:(UIView*)view controllerSup:(ControllerSupport*)controllerSupport streamConfig:(StreamConfiguration*)streamConfig oscLevel:(int)oscLevel { - (id) initWithView:(UIView*)view controllerSup:(ControllerSupport*)controllerSupport streamConfig:(StreamConfiguration*)streamConfig oscLevel:(int)oscLevel {
[[NSNotificationCenter defaultCenter] addObserver:self [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleMovingOnScreenWidgetNotification:) selector:@selector(handleMovingOnScreenWidgetNotification:)
name:@"OnScreenWidgetMovedByTouch" // This is a special notification for reloading the on screen keyboard buttons. which can't be executed by _oscProfilesTableViewController.needToUpdateOscLayoutTVC code block, and has to be triggered by a notification name:@"OnScreenWidgetMovedByTouch"
object:nil]; object:nil];
@@ -247,7 +247,6 @@
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Reset variables related to on screen controller button drag and drop routine. These variables should be reset in 'touchesCancelled' or 'touchesEnded' but these may not be called in unaccounted-for edge cases such as when the user opens various OS-level control center related views by dragging down from the top of the screen, or dragging up from the bottom of the screen. Since Apple likes to add new control centers and new ways of opening them (i.e. Dynamic Island on iPhone 14 Pro) it's best to reset these variables here when the user is beginning a new on screen controller button drag routine */ /* Reset variables related to on screen controller button drag and drop routine. These variables should be reset in 'touchesCancelled' or 'touchesEnded' but these may not be called in unaccounted-for edge cases such as when the user opens various OS-level control center related views by dragging down from the top of the screen, or dragging up from the bottom of the screen. Since Apple likes to add new control centers and new ways of opening them (i.e. Dynamic Island on iPhone 14 Pro) it's best to reset these variables here when the user is beginning a new on screen controller button drag routine */
// [[NSNotificationCenter defaultCenter] postNotificationName:@"LegacyOscCALayerSelectedNotification" object:self];
layerBeingDragged = nil; layerBeingDragged = nil;
horizontalGuideline.backgroundColor = [UIColor blueColor]; horizontalGuideline.backgroundColor = [UIColor blueColor];
verticalGuideline.backgroundColor = [UIColor blueColor]; verticalGuideline.backgroundColor = [UIColor blueColor];
@@ -293,6 +292,8 @@
layerBeingDragged = layer; layerBeingDragged = layer;
} }
if(!layerBeingDragged) return;
[[NSNotificationCenter defaultCenter] postNotificationName:@"LegacyOscCALayerSelectedNotification" object:layerBeingDragged]; // inform that a CALayer of onScreen controller has being selected [[NSNotificationCenter defaultCenter] postNotificationName:@"LegacyOscCALayerSelectedNotification" object:layerBeingDragged]; // inform that a CALayer of onScreen controller has being selected
/* save the name, position, and visibility of button being touched in array in case user wants to undo the change later */ /* save the name, position, and visibility of button being touched in array in case user wants to undo the change later */
@@ -337,7 +337,7 @@ static CGRect streamViewBounds;
buttonState.isHidden = oscButtonLayer.isHidden; buttonState.isHidden = oscButtonLayer.isHidden;
buttonState.oscLayerSizeFactor = [OnScreenControls getControllerLayerSizeFactor:oscButtonLayer]; buttonState.oscLayerSizeFactor = [OnScreenControls getControllerLayerSizeFactor:oscButtonLayer];
buttonState.backgroundAlpha = oscButtonLayer.opacity; buttonState.backgroundAlpha = oscButtonLayer.opacity;
NSLog(@"oscLayerName: %@, opacity: %f, ", oscButtonLayer.name, buttonState.backgroundAlpha); // NSLog(@"oscLayerName: %@, opacity: %f, ", oscButtonLayer.name, buttonState.backgroundAlpha);
// buttonState.oscLayerSizeFactor = oscButtonLayer.bounds; // buttonState.oscLayerSizeFactor = oscButtonLayer.bounds;
-1
View File
@@ -1387,7 +1387,6 @@ static float L3_Y;
[_deadTouches addObject:touch]; [_deadTouches addObject:touch];
updated = true; updated = true;
touchEventCapturedByOsc = true; touchEventCapturedByOsc = true;
// NSLog(@"blablablab updated true");
} }
// additionally, populate the touchesCapturedByOSButton set, for native/relative touch handler to deal with. // additionally, populate the touchesCapturedByOSButton set, for native/relative touch handler to deal with.
if(touchEventCapturedByOsc) [touchAddrsCapturedByOnScreenControls addObject:@((uintptr_t)touch)]; if(touchEventCapturedByOsc) [touchAddrsCapturedByOnScreenControls addObject:@((uintptr_t)touch)];
+5 -2
View File
@@ -151,8 +151,11 @@ import UIKit
// let stickAndMouseTouchpads = ["LSPAD", "RSPAD", "LSVPAD", "RSVPAD", "MOUSEPAD"] // let stickAndMouseTouchpads = ["LSPAD", "RSPAD", "LSVPAD", "RSVPAD", "MOUSEPAD"]
let nonVectorStickPads = ["LSPAD", "RSPAD"] let nonVectorStickPads = ["LSPAD", "RSPAD"]
if CommandManager.touchPadCmds.contains(self.touchPadString) {self.hasSensitivityTweak = true} // if CommandManager.touchPadCmds.contains(self.touchPadString) {self.hasSensitivityTweak = true}
if nonVectorStickPads.contains(self.touchPadString) && widgetType == WidgetTypeEnum.touchPad {self.hasStickIndicator = true} self.hasSensitivityTweak = CommandManager.touchPadCmds.contains(self.touchPadString)
// if nonVectorStickPads.contains(self.touchPadString) && widgetType == WidgetTypeEnum.touchPad {self.hasStickIndicator = true}
self.hasStickIndicator = nonVectorStickPads.contains(self.touchPadString) && widgetType == WidgetTypeEnum.touchPad
switch self.cmdString { switch self.cmdString {
case "LSPAD", "LSVPAD": case "LSPAD", "LSVPAD":
+142 -142
View File
@@ -260,6 +260,52 @@
} }
} }
}, },
"Alpha" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度"
}
}
}
},
"Alpha: %.2f" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度: %.2f"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度: %.2f"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度: %.2f"
}
}
}
},
"Back" : { "Back" : {
"extractionState" : "manual", "extractionState" : "manual",
"localizations" : { "localizations" : {
@@ -1238,6 +1284,52 @@
} }
} }
}, },
"Height" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度"
}
}
}
},
"Height: %.2f" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度: %.2f"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度: %.2f"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度: %.2f"
}
}
}
},
"Help" : { "Help" : {
"extractionState" : "manual", "extractionState" : "manual",
"localizations" : { "localizations" : {
@@ -1330,25 +1422,25 @@
} }
} }
}, },
"Indicator Offset: %.2f" : { "Indicator Offset: %.0f" : {
"extractionState" : "manual", "extractionState" : "manual",
"localizations" : { "localizations" : {
"zh-Hans" : { "zh-Hans" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "指示器偏离: %.2f" "value" : "指示器偏离: %.0f"
} }
}, },
"zh-Hant" : { "zh-Hant" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "指示器偏离: %.2f" "value" : "指示器偏离: %.0f"
} }
}, },
"zh-HK" : { "zh-HK" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "指示器偏离: %.2f" "value" : "指示器偏离: %.0f"
} }
} }
} }
@@ -2746,6 +2838,52 @@
} }
} }
}, },
"Size" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小"
}
}
}
},
"Size: %.2f" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小: %.2f"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小: %.2f"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小: %.2f"
}
}
}
},
"Slide Distance for in-Stream Menu: %.2f * screen-width" : { "Slide Distance for in-Stream Menu: %.2f * screen-width" : {
"extractionState" : "manual", "extractionState" : "manual",
"localizations" : { "localizations" : {
@@ -3310,144 +3448,6 @@
} }
} }
}, },
"Widget Alpha" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度"
}
}
}
},
"Widget Alpha: %.2f" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度: %.2f"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度: %.2f"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件透明度: %.2f"
}
}
}
},
"Widget Height" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度"
}
}
}
},
"Widget Height: %.2f" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度: %.2f"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度: %.2f"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件高度: %.2f"
}
}
}
},
"Widget Size" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小"
}
}
}
},
"Widget Size: %.2f" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小: %.2f"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小: %.2f"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "控件大小: %.2f"
}
}
}
},
"Your network connection isn't performing well. Reduce your video bitrate setting or try a faster connection." : { "Your network connection isn't performing well. Reduce your video bitrate setting or try a faster connection." : {
"extractionState" : "manual", "extractionState" : "manual",
"localizations" : { "localizations" : {
@@ -40,14 +40,47 @@ NS_ASSUME_NONNULL_BEGIN
@property (weak, nonatomic) IBOutlet UIImageView *chevronImageView; @property (weak, nonatomic) IBOutlet UIImageView *chevronImageView;
@property (weak, nonatomic) IBOutlet UIStackView *toolbarStackView; @property (weak, nonatomic) IBOutlet UIStackView *toolbarStackView;
@property (strong, nonatomic) OSCProfilesTableViewController *oscProfilesTableViewController; @property (strong, nonatomic) OSCProfilesTableViewController *oscProfilesTableViewController;
@property (nonatomic, assign) NSString *currentProfileName; @property (nonatomic, assign) NSString *currentProfileName;
@property (strong, nonatomic) IBOutlet UILabel *currentProfileLabel; @property (strong, nonatomic) IBOutlet UILabel *currentProfileLabel;
@property (strong, nonatomic) IBOutlet UISlider *widgetSizeSlider;
@property (strong, nonatomic) IBOutlet UISlider *widgetHeightSlider; @property (weak, nonatomic) IBOutlet UILabel *widgetSizeLabel;
@property (strong, nonatomic) IBOutlet UISlider *widgetAlphaSlider; @property (weak, nonatomic) IBOutlet UISlider *widgetSizeSlider;
@property (strong, nonatomic) IBOutlet UISlider *sensitivityFactorSlider; @property (weak, nonatomic) IBOutlet UIStackView *widgetSizeStack;
@property (strong, nonatomic) IBOutlet UISlider *stickIndicatorOffsetSlider;
@property (strong, nonatomic) IBOutlet UISlider *widgetBorderWidthSlider; @property (weak, nonatomic) IBOutlet UILabel *widgetHeightLabel;
@property (weak, nonatomic) IBOutlet UISlider *widgetHeightSlider;
@property (weak, nonatomic) IBOutlet UIStackView *widgetHeightStack;
@property (weak, nonatomic) IBOutlet UILabel *widgetBorderWidthLabel;
@property (weak, nonatomic) IBOutlet UISlider *widgetBorderWidthSlider;
@property (weak, nonatomic) IBOutlet UILabel *widgetAlphaLabel;
@property (weak, nonatomic) IBOutlet UISlider *widgetAlphaSlider;
@property (weak, nonatomic) IBOutlet UIStackView *borderWidthAlphaStack;
@property (weak, nonatomic) IBOutlet UIButton *saveButton;
@property (weak, nonatomic) IBOutlet UIButton *exitButton;
@property (weak, nonatomic) IBOutlet UIButton *loadButton;
@property (weak, nonatomic) IBOutlet UIButton *addButton;
@property (weak, nonatomic) IBOutlet UIButton *editButton;
@property (weak, nonatomic) IBOutlet UILabel *stickIndicatorOffsetLabel;
@property (weak, nonatomic) IBOutlet UISlider *stickIndicatorOffsetSlider;
@property (weak, nonatomic) IBOutlet UIStackView *stickIndicatorOffsetStack;
@property (weak, nonatomic) IBOutlet UILabel *sensitivityLabel;
@property (weak, nonatomic) IBOutlet UISlider *sensitivitySlider;
@property (weak, nonatomic) IBOutlet UIStackView *sensitivityStack;
@property (weak, nonatomic) IBOutlet UIStackView *widgetPanelStack;
@end @end
@@ -16,6 +16,7 @@
#import "OSCProfilesManager.h" #import "OSCProfilesManager.h"
#import "LocalizationHelper.h" #import "LocalizationHelper.h"
#import "Moonlight-Swift.h" #import "Moonlight-Swift.h"
#import "ThemeManager.h"
@interface LayoutOnScreenControlsViewController () @interface LayoutOnScreenControlsViewController ()
@@ -32,13 +33,10 @@
bool controllerLayerSelected; bool controllerLayerSelected;
__weak IBOutlet NSLayoutConstraint *toolbarTopConstraintiPhone; __weak IBOutlet NSLayoutConstraint *toolbarTopConstraintiPhone;
__weak IBOutlet NSLayoutConstraint *toolbarTopConstraintiPad; __weak IBOutlet NSLayoutConstraint *toolbarTopConstraintiPad;
UILabel *widgetSizeSliderLabel; UIColor* trashCanStoryBoardColor;
UILabel *widgetHeightSliderLabel; BOOL widgetPanelMovedByTouch;
UILabel *widgetAlphaSliderLabel; CGPoint widgetPanelStoredCenter;
UILabel *widgetBorderWidthSliderLabel; CGPoint latestTouchLocation;
UILabel *sensitivitySliderLabel;
UILabel *stickIndicatorOffsetSliderLabel;
UILabel *stickIndicatorOffsetExplain;
} }
@synthesize trashCanButton; @synthesize trashCanButton;
@@ -80,13 +78,12 @@
} }
- (void) reloadOnScreenWidgetViews { - (void) reloadOnScreenWidgetViews {
OnScreenWidgetView.editMode = true;
[self->selectedWidgetView.stickBallLayer removeFromSuperlayer]; [self->selectedWidgetView.stickBallLayer removeFromSuperlayer];
[self->selectedWidgetView.crossMarkLayer removeFromSuperlayer]; [self->selectedWidgetView.crossMarkLayer removeFromSuperlayer];
for (UIView *subview in self.view.subviews) { for (UIView *subview in self.view.subviews) {
// 检查子视图是否是特定类型的实例
if ([subview isKindOfClass:[OnScreenWidgetView class]]) { if ([subview isKindOfClass:[OnScreenWidgetView class]]) {
// 如果是,就添加到将要被移除的数组中
[subview removeFromSuperview]; [subview removeFromSuperview];
} }
} }
@@ -111,7 +108,7 @@
widgetView.stickIndicatorOffset = buttonState.stickIndicatorOffset; widgetView.stickIndicatorOffset = buttonState.stickIndicatorOffset;
widgetView.minStickOffset = buttonState.minStickOffset; widgetView.minStickOffset = buttonState.minStickOffset;
// Add the widgetView to the view controller's view // Add the widgetView to the view controller's view
[self.view addSubview:widgetView]; [self.view insertSubview:widgetView belowSubview:self.widgetSizeStack];
buttonState.position = [self denormalizeWidgetPosition:buttonState.position]; buttonState.position = [self denormalizeWidgetPosition:buttonState.position];
[widgetView setLocationWithPosition:buttonState.position]; [widgetView setLocationWithPosition:buttonState.position];
[widgetView resizeWidgetView]; // resize must be called after relocation [widgetView resizeWidgetView]; // resize must be called after relocation
@@ -128,17 +125,9 @@
self.OnScreenWidgetViews = [[NSMutableSet alloc] init]; // will be revised to read persisted data , somewhere else self.OnScreenWidgetViews = [[NSMutableSet alloc] init]; // will be revised to read persisted data , somewhere else
[OSCProfilesManager setOnScreenWidgetViewsSet:self.OnScreenWidgetViews]; // pass the keyboard button dict to profiles manager [OSCProfilesManager setOnScreenWidgetViewsSet:self.OnScreenWidgetViews]; // pass the keyboard button dict to profiles manager
isToolbarHidden = NO; // keeps track if the toolbar is hidden up above the screen so that we know whether to hide or show it when the user taps the toolbar's hide/show button //isToolbarHidden = NO; // keeps track if the toolbar is hidden up above the screen so that we know whether to hide or show it when the user taps the toolbar's hide/show button
_quickSwitchEnabled = false; _quickSwitchEnabled = false;
widgetSizeSliderLabel = [[UILabel alloc] init];
widgetHeightSliderLabel = [[UILabel alloc] init];
widgetAlphaSliderLabel = [[UILabel alloc] init];
widgetBorderWidthSliderLabel = [[UILabel alloc] init];
sensitivitySliderLabel = [[UILabel alloc] init];
stickIndicatorOffsetSliderLabel = [[UILabel alloc] init];
stickIndicatorOffsetExplain = [[UILabel alloc] init];
/* add curve to bottom of chevron tab view */ /* add curve to bottom of chevron tab view */
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.chevronView.bounds byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(10.0, 10.0)]; UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.chevronView.bounds byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(10.0, 10.0)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
@@ -197,7 +186,11 @@
selector:@selector(widgetViewTapped:) selector:@selector(widgetViewTapped:)
name:@"OnScreenWidgetViewSelected" name:@"OnScreenWidgetViewSelected"
object:nil]; object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleMovingOnScreenWidgetNotification:)
name:@"OnScreenWidgetMovedByTouch"
object:nil];
@@ -226,6 +219,7 @@
}]; }];
}]; }];
}); });
trashCanStoryBoardColor = trashCanButton.tintColor;
} }
@@ -233,11 +227,13 @@
- (void) viewDidAppear:(BOOL)animated { - (void) viewDidAppear:(BOOL)animated {
OnScreenWidgetView.editMode = true; OnScreenWidgetView.editMode = true;
selectedWidgetView = nil; selectedWidgetView = nil;
widgetPanelStoredCenter = self.widgetPanelStack.center;
[super viewDidAppear:animated]; [super viewDidAppear:animated];
} }
- (void) viewWillAppear:(BOOL)animated{ - (void) viewWillAppear:(BOOL)animated{
self.navigationController.navigationBar.hidden = _quickSwitchEnabled; OnScreenWidgetView.editMode = true;
[self handleMissingToolBarIcon:toolbarRootView];
[self profileRefresh]; [self profileRefresh];
} }
@@ -261,7 +257,6 @@
[UIView animateWithDuration:0.2 animations:^{ // animates toolbar up and off screen [UIView animateWithDuration:0.2 animations:^{ // animates toolbar up and off screen
toolbarTopConstraint.constant -= self.toolbarRootView.frame.size.height; toolbarTopConstraint.constant -= self.toolbarRootView.frame.size.height;
[self.view layoutIfNeeded]; [self.view layoutIfNeeded];
} }
completion:^(BOOL finished) { completion:^(BOOL finished) {
if (finished) { if (finished) {
@@ -553,16 +548,19 @@
newWidget.stickIndicatorOffset = widget.stickIndicatorOffset; newWidget.stickIndicatorOffset = widget.stickIndicatorOffset;
newWidget.minStickOffset = [widgetInitParams[@"minStickOffsetString"] floatValue]; newWidget.minStickOffset = [widgetInitParams[@"minStickOffsetString"] floatValue];
// Add the widgetView to the view controller's view // Add the widgetView to the view controller's view
[self.view addSubview:newWidget]; [self.view insertSubview:newWidget belowSubview:self.widgetSizeStack];
if(createNew) [newWidget setLocationWithPosition:CGPointMake(50, 50)];
if(createNew) [newWidget setLocationWithPosition:CGPointMake(90, 130)];
else [newWidget setLocationWithPosition:widget.center]; else [newWidget setLocationWithPosition:widget.center];
[newWidget resizeWidgetView]; // resize must be called after relocation [newWidget resizeWidgetView]; // resize must be called after relocation
[newWidget adjustTransparencyWithAlpha:widget.backgroundAlpha]; [newWidget adjustTransparencyWithAlpha:widget.backgroundAlpha];
[newWidget adjustBorderWithWidth:widget.borderWidth]; [newWidget adjustBorderWithWidth:widget.borderWidth];
if(!createNew) [self.OnScreenWidgetViews removeObject:widget];
[self.OnScreenWidgetViews addObject:newWidget]; [self.OnScreenWidgetViews addObject:newWidget];
if(!createNew) [widget removeFromSuperview];
self->selectedWidgetView = newWidget; self->selectedWidgetView = newWidget;
if(!createNew){
[self.OnScreenWidgetViews removeObject:widget];
[widget removeFromSuperview];
}
} }
@@ -574,8 +572,8 @@
widgetView.minStickOffset = [widgetInitParams[@"minStickOffsetString"] floatValue]; widgetView.minStickOffset = [widgetInitParams[@"minStickOffsetString"] floatValue];
[self.OnScreenWidgetViews addObject:widgetView]; [self.OnScreenWidgetViews addObject:widgetView];
// Add the widgetView to the view controller's view // Add the widgetView to the view controller's view
[self.view addSubview:widgetView]; [self.view insertSubview:widgetView belowSubview:self.widgetSizeStack];
[widgetView setLocationWithPosition:CGPointMake(50, 50)]; [widgetView setLocationWithPosition:CGPointMake(90, 130)];
[widgetView resizeWidgetView]; [widgetView resizeWidgetView];
} }
@@ -598,6 +596,13 @@
} }
} }
- (void)autoFitView:(UIView* )view{
CGSize fittingSize = [view systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
CGRect newFrame = view.frame;
newFrame.size = fittingSize;
view.frame = newFrame;
}
- (void)widgetViewTapped: (NSNotification *)notification{ - (void)widgetViewTapped: (NSNotification *)notification{
// receive the selected widgetView obj passed from the notification // receive the selected widgetView obj passed from the notification
OnScreenWidgetView* widgetView = (OnScreenWidgetView* )notification.object; OnScreenWidgetView* widgetView = (OnScreenWidgetView* )notification.object;
@@ -615,11 +620,14 @@
bool showSensitivityFactorSlider = selectedWidgetView.hasSensitivityTweak; bool showSensitivityFactorSlider = selectedWidgetView.hasSensitivityTweak;
bool showStickIndicatorOffsetSlider = selectedWidgetView.hasStickIndicator; bool showStickIndicatorOffsetSlider = selectedWidgetView.hasStickIndicator;
self.sensitivityFactorSlider.hidden = self->sensitivitySliderLabel.hidden = !showSensitivityFactorSlider;
self.stickIndicatorOffsetSlider.hidden = self->stickIndicatorOffsetExplain.hidden = self->stickIndicatorOffsetSliderLabel.hidden = !showStickIndicatorOffsetSlider; self.sensitivityStack.hidden = !showSensitivityFactorSlider;
self.stickIndicatorOffsetStack.hidden = !showStickIndicatorOffsetSlider;
[self autoFitView:self.widgetPanelStack];
if(showSensitivityFactorSlider){ if(showSensitivityFactorSlider){
[self.sensitivityFactorSlider setValue:self->selectedWidgetView.sensitivityFactor]; [self.sensitivitySlider setValue:self->selectedWidgetView.sensitivityFactor];
[sensitivitySliderLabel setText:[LocalizationHelper localizedStringForKey:@"Sensitivity: %.2f", self->selectedWidgetView.sensitivityFactor]]; [self.sensitivityLabel setText:[LocalizationHelper localizedStringForKey:@"Sensitivity: %.2f", self->selectedWidgetView.sensitivityFactor]];
} }
if(showStickIndicatorOffsetSlider){ if(showStickIndicatorOffsetSlider){
// illustrating the indicator offset, // illustrating the indicator offset,
@@ -628,13 +636,13 @@
selectedWidgetView.touchBeganLocation = CGPointMake(CGRectGetWidth(selectedWidgetView.frame)/2, CGRectGetHeight(selectedWidgetView.frame)/4); selectedWidgetView.touchBeganLocation = CGPointMake(CGRectGetWidth(selectedWidgetView.frame)/2, CGRectGetHeight(selectedWidgetView.frame)/4);
[selectedWidgetView showStickIndicator];// this will create the indicator CAShapeLayers [selectedWidgetView showStickIndicator];// this will create the indicator CAShapeLayers
[self.stickIndicatorOffsetSlider setValue:self->selectedWidgetView.stickIndicatorOffset]; [self.stickIndicatorOffsetSlider setValue:self->selectedWidgetView.stickIndicatorOffset];
[stickIndicatorOffsetSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Indicator Offset: %.2f", self->selectedWidgetView.stickIndicatorOffset]]; [self.stickIndicatorOffsetLabel setText:[LocalizationHelper localizedStringForKey:@"Indicator Offset: %.0f", self->selectedWidgetView.stickIndicatorOffset]];
[self->selectedWidgetView updateStickIndicator]; [self->selectedWidgetView updateStickIndicator];
} }
[widgetSizeSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Size: %.2f", self->selectedWidgetView.widthFactor]]; [self.widgetSizeLabel setText:[LocalizationHelper localizedStringForKey:@"Size: %.2f", self->selectedWidgetView.widthFactor]];
[widgetHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", self->selectedWidgetView.heightFactor]]; [self.widgetHeightLabel setText:[LocalizationHelper localizedStringForKey:@"Height: %.2f", self->selectedWidgetView.heightFactor]];
[widgetAlphaSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Alpha: %.2f", self->selectedWidgetView.backgroundAlpha]]; [self.widgetAlphaLabel setText:[LocalizationHelper localizedStringForKey:@"Alpha: %.2f", self->selectedWidgetView.backgroundAlpha]];
[widgetBorderWidthSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Border Width: %.2f", self->selectedWidgetView.borderWidth]]; [self.widgetBorderWidthLabel setText:[LocalizationHelper localizedStringForKey:@"Border Width: %.2f", self->selectedWidgetView.borderWidth]];
} }
- (void)setControllerCALayerSliderValues: (NSNotification *)notification{ - (void)setControllerCALayerSliderValues: (NSNotification *)notification{
@@ -644,11 +652,9 @@
[self->selectedWidgetView.crossMarkLayer removeFromSuperlayer]; [self->selectedWidgetView.crossMarkLayer removeFromSuperlayer];
self->widgetViewSelected = false; self->widgetViewSelected = false;
self->selectedWidgetView = nil; self->selectedWidgetView = nil;
self->stickIndicatorOffsetExplain.hidden = true;
self->stickIndicatorOffsetSliderLabel.hidden = true; self.stickIndicatorOffsetStack.hidden = true;
self.stickIndicatorOffsetSlider.hidden = true; self.sensitivityStack.hidden = true;
self->sensitivitySliderLabel.hidden = true;
self.sensitivityFactorSlider.hidden = true;
self->controllerLayerSelected = true; self->controllerLayerSelected = true;
self->selectedControllerLayer = controllerLayer; self->selectedControllerLayer = controllerLayer;
@@ -661,14 +667,14 @@
CGFloat alpha = [self.layoutOSC getControllerLayerOpacity:controllerLayer]; CGFloat alpha = [self.layoutOSC getControllerLayerOpacity:controllerLayer];
[self.widgetAlphaSlider setValue:alpha]; [self.widgetAlphaSlider setValue:alpha];
[widgetSizeSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Size: %.2f", sizeFactor]]; [self.widgetSizeLabel setText:[LocalizationHelper localizedStringForKey:@"Size: %.2f", sizeFactor]];
[widgetHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", sizeFactor]]; [self.widgetHeightLabel setText:[LocalizationHelper localizedStringForKey:@"Height: %.2f", sizeFactor]];
[widgetAlphaSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Alpha: %.2f", alpha]]; [self.widgetAlphaLabel setText:[LocalizationHelper localizedStringForKey:@"Alpha: %.2f", alpha]];
} }
- (void)widgetSizeSliderMoved{ - (void)widgetSizeSliderMoved{
[widgetSizeSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Size: %.2f", self.widgetSizeSlider.value]]; [self.widgetSizeLabel setText:[LocalizationHelper localizedStringForKey:@"Size: %.2f", self.widgetSizeSlider.value]];
[widgetHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", self.widgetSizeSlider.value]]; // resizing the whole button [self.widgetHeightLabel setText:[LocalizationHelper localizedStringForKey:@"Height: %.2f", self.widgetSizeSlider.value]]; // resizing the whole button
[self.widgetHeightSlider setValue: self.widgetSizeSlider.value]; [self.widgetHeightSlider setValue: self.widgetSizeSlider.value];
if(self->selectedWidgetView != nil && self->widgetViewSelected){ if(self->selectedWidgetView != nil && self->widgetViewSelected){
@@ -683,7 +689,7 @@
} }
- (void)widgetHeightSliderMoved{ - (void)widgetHeightSliderMoved{
[widgetHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", self.widgetHeightSlider.value]]; [self.widgetHeightLabel setText:[LocalizationHelper localizedStringForKey:@"Height: %.2f", self.widgetHeightSlider.value]];
if(self->selectedWidgetView != nil && self->widgetViewSelected){ if(self->selectedWidgetView != nil && self->widgetViewSelected){
self->selectedWidgetView.translatesAutoresizingMaskIntoConstraints = true; // this is mandatory to prevent unexpected key view location change self->selectedWidgetView.translatesAutoresizingMaskIntoConstraints = true; // this is mandatory to prevent unexpected key view location change
if([self->selectedWidgetView.shape isEqualToString:@"round"]) return; // don't change height for round buttons, except for dPad buttons which are in rectangle shape if([self->selectedWidgetView.shape isEqualToString:@"round"]) return; // don't change height for round buttons, except for dPad buttons which are in rectangle shape
@@ -693,7 +699,7 @@
} }
- (void)widgetAlphaSliderMoved{ - (void)widgetAlphaSliderMoved{
[widgetAlphaSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Alpha: %.2f", self.widgetAlphaSlider.value]]; [self.widgetAlphaLabel setText:[LocalizationHelper localizedStringForKey:@"Alpha: %.2f", self.widgetAlphaSlider.value]];
if(self->selectedWidgetView != nil && self->widgetViewSelected){ if(self->selectedWidgetView != nil && self->widgetViewSelected){
[self->selectedWidgetView adjustTransparencyWithAlpha:self.widgetAlphaSlider.value]; [self->selectedWidgetView adjustTransparencyWithAlpha:self.widgetAlphaSlider.value];
} }
@@ -705,7 +711,7 @@
} }
- (void)widgetBorderWidthSliderMoved{ - (void)widgetBorderWidthSliderMoved{
[widgetBorderWidthSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Border Width: %.2f", self.widgetBorderWidthSlider.value]]; [self.widgetBorderWidthLabel setText:[LocalizationHelper localizedStringForKey:@"Border Width: %.2f", self.widgetBorderWidthSlider.value]];
if(self->selectedWidgetView != nil && self->widgetViewSelected){ if(self->selectedWidgetView != nil && self->widgetViewSelected){
[self->selectedWidgetView adjustBorderWithWidth:self.widgetBorderWidthSlider.value]; [self->selectedWidgetView adjustBorderWithWidth:self.widgetBorderWidthSlider.value];
} }
@@ -713,13 +719,13 @@
} }
- (void)sensitivitySliderMoved{ - (void)sensitivitySliderMoved{
[sensitivitySliderLabel setText:[LocalizationHelper localizedStringForKey:@"Sensitivity: %.2f", self.sensitivityFactorSlider.value]]; [self.sensitivityLabel setText:[LocalizationHelper localizedStringForKey:@"Sensitivity: %.2f", self.sensitivitySlider.value]];
if(self->selectedWidgetView != nil && self->widgetViewSelected) self->selectedWidgetView.sensitivityFactor = self.sensitivityFactorSlider.value; if(self->selectedWidgetView != nil && self->widgetViewSelected) self->selectedWidgetView.sensitivityFactor = self.sensitivitySlider.value;
return; return;
} }
- (void)stickIndicatorOffsetSliderMoved{ - (void)stickIndicatorOffsetSliderMoved{
[stickIndicatorOffsetSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Indicator Offset: %.2f", self.stickIndicatorOffsetSlider.value]]; [self.stickIndicatorOffsetLabel setText:[LocalizationHelper localizedStringForKey:@"Indicator Offset: %.0f", self.stickIndicatorOffsetSlider.value]];
if(self->selectedWidgetView != nil && self->widgetViewSelected){ if(self->selectedWidgetView != nil && self->widgetViewSelected){
self->selectedWidgetView.stickIndicatorOffset = self.stickIndicatorOffsetSlider.value; self->selectedWidgetView.stickIndicatorOffset = self.stickIndicatorOffsetSlider.value;
[self->selectedWidgetView updateStickIndicator]; [self->selectedWidgetView updateStickIndicator];
@@ -732,158 +738,93 @@
[selectedWidgetView showStickIndicator]; [selectedWidgetView showStickIndicator];
} }
- (void)setupProfileLableAndSliders{
//if(_quickSwitchEnabled) return;
// self.currentProfileLabel.frame = CGRectMake(0, 0, 180, 35);
// CGFloat profileLabelXPosition = self.view.bounds.size.width - self.currentProfileLabel.frame.size.width - 20;
CGFloat sliderXPosition = (self.view.bounds.size.width - self.widgetSizeSlider.frame.size.width)/2 ;
CGFloat profileLabelXPosition = self.view.bounds.size.width/2 + (self.widgetSizeSlider.frame.size.width)/2 + 8;
// Set the label's frame with the calculated x-position - (void)handleMissingToolBarIcon:(UIView *)view {
self.currentProfileLabel.frame = CGRectMake(profileLabelXPosition, self.currentProfileLabel.frame.origin.y, self.currentProfileLabel.frame.size.width, self.currentProfileLabel.frame.size.height); for (UIView *subview in view.subviews) {
self.currentProfileLabel.hidden = _quickSwitchEnabled; // Show Current Profile display if ([subview isKindOfClass:[UIButton class]]) {
if (@available(iOS 13.0, *)) { UIButton *button = (UIButton *)subview;
self.currentProfileLabel.textAlignment = NSTextAlignmentNatural; if(!button.imageView.image){
self.currentProfileLabel.numberOfLines = 2; NSLog(@"missing image %d", button==_saveButton);
} else { button.titleLabel.font = [UIFont systemFontOfSize:18 weight:UIFontWeightMedium];
// Fallback on earlier versions if(button==_exitButton) [button setTitle:[LocalizationHelper localizedStringForKey:@"Exit"] forState:UIControlStateNormal];
if(button==trashCanButton) [button setTitle:[LocalizationHelper localizedStringForKey:@"Del"] forState:UIControlStateNormal];
if(button==undoButton) [button setTitle:[LocalizationHelper localizedStringForKey:@"Undo"] forState:UIControlStateNormal];
if(button==_saveButton) [button setTitle:[LocalizationHelper localizedStringForKey:@"Save"] forState:UIControlStateNormal];
if(button==_loadButton) [button setTitle:[LocalizationHelper localizedStringForKey:@"Load"] forState:UIControlStateNormal];
if(button==_addButton) [button setTitle:[LocalizationHelper localizedStringForKey:@"Add"] forState:UIControlStateNormal];
if(button==_editButton) [button setTitle:[LocalizationHelper localizedStringForKey:@"Edit"] forState:UIControlStateNormal];
}
}
[self handleMissingToolBarIcon:subview];
}
}
- (void)setupWidgetPanel{
//[self handleMissingToolBarIcon];
self.widgetPanelStack.hidden = NO;
self.widgetPanelStack.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);
self.widgetPanelStack.layoutMarginsRelativeArrangement = YES;
self.widgetPanelStack.layer.cornerRadius = 16;
self.widgetPanelStack.clipsToBounds = YES;
/*
[NSLayoutConstraint activateConstraints:@[
[self.widgetPanelStack.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor constant:0],
[self.widgetPanelStack.topAnchor constraintEqualToAnchor:self.view.topAnchor constant:120],
]];
*/
self.widgetPanelStack.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
[self.currentProfileLabel setText:[LocalizationHelper localizedStringForKey:@"Profile: %@",[profilesManager getSelectedProfile].name]];
self.currentProfileLabel.layer.cornerRadius = 12;
self.currentProfileLabel.clipsToBounds = YES;
self.widgetSizeStack.userInteractionEnabled = YES;
for(UIView* view in _widgetPanelStack.subviews){
view.userInteractionEnabled = YES;
if([view isKindOfClass:[UILabel class]]){
UILabel* label = (UILabel* )view;
label.font = [UIFont systemFontOfSize:18];
label.textColor = [UIColor whiteColor];
}
} }
[self.currentProfileLabel setText:[LocalizationHelper localizedStringForKey:@"Profile: %@",[profilesManager getSelectedProfile].name]]; // display current profile name when profile is being refreshed.
// button size sliders
self.widgetSizeSlider.hidden = _quickSwitchEnabled;
self.widgetSizeSlider.frame = CGRectMake(sliderXPosition, self.widgetSizeSlider.frame.origin.y, self.widgetSizeSlider.frame.size.width, self.widgetSizeSlider.frame.size.height);
[self.widgetSizeSlider addTarget:self action:@selector(widgetSizeSliderMoved) forControlEvents:(UIControlEventValueChanged)]; [self.widgetSizeSlider addTarget:self action:@selector(widgetSizeSliderMoved) forControlEvents:(UIControlEventValueChanged)];
widgetSizeSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Widget Size"]; self.widgetSizeLabel.text = [LocalizationHelper localizedStringForKey:@"Size"];
widgetSizeSliderLabel.font = [UIFont systemFontOfSize:18]; self.widgetSizeStack.hidden = _quickSwitchEnabled;
widgetSizeSliderLabel.textColor = [UIColor whiteColor];
widgetSizeSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
widgetSizeSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
// Add slider and label to the view
[self.view addSubview:widgetSizeSliderLabel];
// Use Auto Layout to position the label relative to the slider
[NSLayoutConstraint activateConstraints:@[
// Position the label to the left of the slider
[widgetSizeSliderLabel.trailingAnchor constraintEqualToAnchor:self.widgetSizeSlider.leadingAnchor constant:-10],
// Align vertically with the slider
[widgetSizeSliderLabel.centerYAnchor constraintEqualToAnchor:self.widgetSizeSlider.centerYAnchor]
]];
widgetSizeSliderLabel.hidden = _quickSwitchEnabled;
// button height sliders
self.widgetHeightSlider.hidden = _quickSwitchEnabled;
self.widgetHeightSlider.frame = CGRectMake(sliderXPosition, self.widgetHeightSlider.frame.origin.y, self.widgetHeightSlider.frame.size.width, self.widgetHeightSlider.frame.size.height);
[self.widgetHeightSlider addTarget:self action:@selector(widgetHeightSliderMoved) forControlEvents:(UIControlEventValueChanged)]; [self.widgetHeightSlider addTarget:self action:@selector(widgetHeightSliderMoved) forControlEvents:(UIControlEventValueChanged)];
// button height label
widgetHeightSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Widget Height"];
widgetHeightSliderLabel.font = [UIFont systemFontOfSize:18];
widgetHeightSliderLabel.textColor = [UIColor whiteColor];
widgetHeightSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
widgetHeightSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
// Add slider and label to the view
[self.view addSubview:widgetHeightSliderLabel];
// Use Auto Layout to position the label relative to the slider
[NSLayoutConstraint activateConstraints:@[
// Position the label to the left of the slider
[widgetHeightSliderLabel.trailingAnchor constraintEqualToAnchor:self.widgetHeightSlider.leadingAnchor constant:-10],
// Align vertically with the slider
[widgetHeightSliderLabel.centerYAnchor constraintEqualToAnchor:self.widgetHeightSlider.centerYAnchor]
]];
widgetHeightSliderLabel.hidden = _quickSwitchEnabled;
// button alpha label self.widgetHeightLabel.text = [LocalizationHelper localizedStringForKey:@"Height"];
self.widgetAlphaSlider.hidden = _quickSwitchEnabled; self.widgetHeightStack.hidden = _quickSwitchEnabled;
self.widgetAlphaSlider.frame = CGRectMake(sliderXPosition, self.widgetAlphaSlider.frame.origin.y, self.widgetAlphaSlider.frame.size.width, self.widgetAlphaSlider.frame.size.height);
[self.widgetAlphaSlider addTarget:self action:@selector(widgetAlphaSliderMoved) forControlEvents:(UIControlEventValueChanged)]; [self.widgetAlphaSlider addTarget:self action:@selector(widgetAlphaSliderMoved) forControlEvents:(UIControlEventValueChanged)];
widgetAlphaSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Widget Alpha"]; self.widgetAlphaLabel.text = [LocalizationHelper localizedStringForKey:@"Alpha"];
widgetAlphaSliderLabel.font = [UIFont systemFontOfSize:18];
widgetAlphaSliderLabel.textColor = [UIColor whiteColor];
widgetAlphaSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
widgetAlphaSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
// Add slider and label to the view
[self.view addSubview:widgetAlphaSliderLabel];
// Use Auto Layout to position the label relative to the slider
[NSLayoutConstraint activateConstraints:@[
// Position the label to the left of the slider
[widgetAlphaSliderLabel.trailingAnchor constraintEqualToAnchor:self.widgetAlphaSlider.leadingAnchor constant:-10],
// Align vertically with the slider
[widgetAlphaSliderLabel.centerYAnchor constraintEqualToAnchor:self.widgetAlphaSlider.centerYAnchor]
]];
widgetAlphaSliderLabel.hidden = _quickSwitchEnabled;
// border Width slider
self.widgetBorderWidthSlider.hidden = _quickSwitchEnabled;
self.widgetBorderWidthSlider.frame = CGRectMake(CGRectGetMaxX(self.currentProfileLabel.frame)-self.widgetBorderWidthSlider.frame.size.width, self.widgetBorderWidthSlider.frame.origin.y, self.widgetBorderWidthSlider.frame.size.width, self.widgetBorderWidthSlider.frame.size.height);
[self.widgetBorderWidthSlider addTarget:self action:@selector(widgetBorderWidthSliderMoved) forControlEvents:(UIControlEventValueChanged)]; [self.widgetBorderWidthSlider addTarget:self action:@selector(widgetBorderWidthSliderMoved) forControlEvents:(UIControlEventValueChanged)];
widgetBorderWidthSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Border Width"]; self.widgetBorderWidthLabel.text = [LocalizationHelper localizedStringForKey:@"Border Width"];
widgetBorderWidthSliderLabel.font = [UIFont systemFontOfSize:18]; self.borderWidthAlphaStack.hidden = _quickSwitchEnabled;
widgetBorderWidthSliderLabel.textColor = [UIColor whiteColor];
widgetBorderWidthSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5]; [self.sensitivitySlider addTarget:self action:@selector(sensitivitySliderMoved) forControlEvents:(UIControlEventValueChanged)];
widgetBorderWidthSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout self.sensitivityLabel.text = [LocalizationHelper localizedStringForKey:@"Sensitivity"];
[self.view addSubview:widgetBorderWidthSliderLabel]; self.sensitivityStack.hidden = YES;
[NSLayoutConstraint activateConstraints:@[
// Position the label to the left of the slider
[widgetBorderWidthSliderLabel.trailingAnchor constraintEqualToAnchor:self.widgetBorderWidthSlider.leadingAnchor constant:-10],
// Align vertically with the slider
[widgetBorderWidthSliderLabel.centerYAnchor constraintEqualToAnchor:self.widgetBorderWidthSlider.centerYAnchor]
]];
widgetBorderWidthSliderLabel.hidden = _quickSwitchEnabled;
// sensitivity slider
self.sensitivityFactorSlider.hidden = YES;
self.sensitivityFactorSlider.frame = CGRectMake(sliderXPosition, self.sensitivityFactorSlider.frame.origin.y, self.sensitivityFactorSlider.frame.size.width, self.sensitivityFactorSlider.frame.size.height);
[self.sensitivityFactorSlider addTarget:self action:@selector(sensitivitySliderMoved) forControlEvents:(UIControlEventValueChanged)];
sensitivitySliderLabel.text = [LocalizationHelper localizedStringForKey:@"Sensitivity"];
sensitivitySliderLabel.font = [UIFont systemFontOfSize:18];
sensitivitySliderLabel.textColor = [UIColor whiteColor];
sensitivitySliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
sensitivitySliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
// Add slider and label to the view
[self.view addSubview:sensitivitySliderLabel];
// Use Auto Layout to position the label relative to the slider
[NSLayoutConstraint activateConstraints:@[
// Position the label to the left of the slider
[sensitivitySliderLabel.trailingAnchor constraintEqualToAnchor:self.sensitivityFactorSlider.leadingAnchor constant:-10],
// Align vertically with the slider
[sensitivitySliderLabel.centerYAnchor constraintEqualToAnchor:self.sensitivityFactorSlider.centerYAnchor]
]];
sensitivitySliderLabel.hidden = self.sensitivityFactorSlider.hidden;
// stick indicator offset slider // stick indicator offset slider
self.stickIndicatorOffsetSlider.hidden = YES; //self.stickIndicatorOffsetSlider.hidden = YES;
self.stickIndicatorOffsetSlider.frame = CGRectMake(sliderXPosition, self.stickIndicatorOffsetSlider.frame.origin.y, self.stickIndicatorOffsetSlider.frame.size.width, self.stickIndicatorOffsetSlider.frame.size.height); // make this label bigger to show some tips
[self.stickIndicatorOffsetSlider addTarget:self action:@selector(stickIndicatorOffsetSliderMoved) forControlEvents:(UIControlEventValueChanged)]; [self.stickIndicatorOffsetSlider addTarget:self action:@selector(stickIndicatorOffsetSliderMoved) forControlEvents:(UIControlEventValueChanged)];
stickIndicatorOffsetSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Indicator Offset"]; self.stickIndicatorOffsetLabel.text = [LocalizationHelper localizedStringForKey:@"Indicator Offset"];
stickIndicatorOffsetSliderLabel.font = [UIFont systemFontOfSize:18]; self.stickIndicatorOffsetStack.hidden = YES;
stickIndicatorOffsetSliderLabel.textColor = [UIColor whiteColor];
stickIndicatorOffsetSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5]; [self.view bringSubviewToFront:self.toolbarRootView];
stickIndicatorOffsetSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout [self.view insertSubview:self.widgetSizeStack belowSubview:self.toolbarRootView];
// tips for stick indicator self.widgetSizeStack.translatesAutoresizingMaskIntoConstraints = YES;
stickIndicatorOffsetExplain.text = [LocalizationHelper localizedStringForKey:@"Ball: assumed touch point. Cross: indicator location"]; CGRect frame = CGRectMake(0, 0, self.widgetSizeStack.frame.size.width, self.widgetSizeStack.frame.size.height);
//stickIndicatorOffsetExplain.frame = CGRectMake(sliderXPosition, self.stickIndicatorOffsetSlider.frame.origin.y + self.stickIndicatorOffsetSlider.frame.size.height, self.stickIndicatorOffsetSlider.frame.size.width, self.stickIndicatorOffsetSlider.frame.size.height); // label bigger show some tips //frame.origin = CGPointMake(self.view.bounds.size.width/2, 100);
stickIndicatorOffsetExplain.font = [UIFont systemFontOfSize:18]; frame.origin = CGPointMake(self.view.bounds.size.width/2-self.widgetSizeStack.frame.size.width/2, 100);
stickIndicatorOffsetExplain.textColor = [UIColor whiteColor]; self.widgetSizeStack.frame = frame;
stickIndicatorOffsetExplain.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5]; [self autoFitView:self.widgetPanelStack];
stickIndicatorOffsetExplain.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
// Add slider and label to the view
[self.view addSubview:stickIndicatorOffsetSliderLabel];
[self.view addSubview:stickIndicatorOffsetExplain];
// Use Auto Layout to position the label relative to the slider
[NSLayoutConstraint activateConstraints:@[
// Position the label to the left of the slider
[stickIndicatorOffsetSliderLabel.trailingAnchor constraintEqualToAnchor:self.stickIndicatorOffsetSlider.leadingAnchor constant:-10],
// Align vertically with the slider
[stickIndicatorOffsetSliderLabel.centerYAnchor constraintEqualToAnchor:self.stickIndicatorOffsetSlider.centerYAnchor],
// Position the explain label
[stickIndicatorOffsetExplain.centerXAnchor constraintEqualToAnchor:self.stickIndicatorOffsetSlider.leadingAnchor constant:-10],
[stickIndicatorOffsetExplain.topAnchor constraintEqualToAnchor:self.stickIndicatorOffsetSlider.bottomAnchor]
]];
stickIndicatorOffsetSliderLabel.hidden = stickIndicatorOffsetExplain.hidden = self.stickIndicatorOffsetSlider.hidden;
} }
- (void)handleProfileTablViewDismiss{ - (void)handleProfileTablViewDismiss{
@@ -904,7 +845,7 @@
} }
// setup: current profile lable, button width slider, button height slider & button alpha slider // setup: current profile lable, button width slider, button height slider & button alpha slider
[self setupProfileLableAndSliders]; [self setupWidgetPanel];
//initialiaze _oscProfilesTableViewController //initialiaze _oscProfilesTableViewController
self->_oscProfilesTableViewController = [storyboard instantiateViewControllerWithIdentifier:@"OSCProfilesTableViewController"]; self->_oscProfilesTableViewController = [storyboard instantiateViewControllerWithIdentifier:@"OSCProfilesTableViewController"];
@@ -947,20 +888,8 @@
[self OSCLayoutChanged]; // fades the 'Undo Button' out [self OSCLayoutChanged]; // fades the 'Undo Button' out
}; };
self.currentProfileLabel.hidden = YES; // Hide Current Profile display before entering the profile table view
self.widgetSizeSlider.hidden = YES; self.widgetPanelStack.hidden = YES;
self.widgetHeightSlider.hidden = YES;
self.widgetAlphaSlider.hidden = YES;
self.widgetBorderWidthSlider.hidden = YES;
self.sensitivityFactorSlider.hidden = YES;
self.stickIndicatorOffsetSlider.hidden = YES;
widgetSizeSliderLabel.hidden = YES;
widgetHeightSliderLabel.hidden = YES;
widgetAlphaSliderLabel.hidden = YES;
widgetBorderWidthSliderLabel.hidden = YES;
sensitivitySliderLabel.hidden = YES;
stickIndicatorOffsetSliderLabel.hidden = YES;
stickIndicatorOffsetExplain.hidden = YES;
[self->selectedWidgetView.stickBallLayer removeFromSuperlayer]; [self->selectedWidgetView.stickBallLayer removeFromSuperlayer];
[self->selectedWidgetView.crossMarkLayer removeFromSuperlayer]; [self->selectedWidgetView.crossMarkLayer removeFromSuperlayer];
@@ -977,7 +906,37 @@
#pragma mark - Touch #pragma mark - Touch
- (void) handleMovingOnScreenWidgetNotification: (NSNotification *)notification{
OnScreenWidgetView* widget = notification.object;
[self.view bringSubviewToFront:widget];
trashCanButton.tintColor = [self layerOverlapWithTrashcanButton:widget.layer] ? [UIColor redColor] : trashCanStoryBoardColor;
}
- (BOOL) widgetPanelTouched:(UITouch *)touch{
CGPoint touchPoint = [touch locationInView:_widgetPanelStack];
UIView *touchedView = [_widgetPanelStack hitTest:touchPoint withEvent:nil];
return touchedView != nil;
}
- (void) handleWidgetPanelMove:(UITouch *)touch{
if(!widgetPanelMovedByTouch) return;
CGPoint currentLocation = [touch locationInView:self.view];
CGFloat offsetX = currentLocation.x - latestTouchLocation.x;
CGFloat offsetY = currentLocation.y - latestTouchLocation.y;
_widgetPanelStack.center = CGPointMake(_widgetPanelStack.center.x+offsetX, _widgetPanelStack.center.y+offsetY);
latestTouchLocation = currentLocation;
widgetPanelStoredCenter = _widgetPanelStack.center;
}
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch* touch = touches.anyObject;
widgetPanelMovedByTouch = [self widgetPanelTouched:touch];
if(widgetPanelMovedByTouch){
latestTouchLocation = [touch locationInView:self.view];
}
for (UITouch* touch in touches) { for (UITouch* touch in touches) {
CGPoint touchLocation = [touch locationInView:self.view]; CGPoint touchLocation = [touch locationInView:self.view];
@@ -996,25 +955,16 @@
} }
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { - (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
// for OnScreenWidgets:
[self handleWidgetPanelMove:touches.anyObject];
// -------- for OSC buttons // -------- for OSC buttons
[self.layoutOSC touchesMoved:touches withEvent:event]; [self.layoutOSC touchesMoved:touches withEvent:event];
if ([self.layoutOSC isLayer:self.layoutOSC.layerBeingDragged if ([self.layoutOSC isLayer:self.layoutOSC.layerBeingDragged
hoveringOverButton:trashCanButton]) { // check if user is dragging around a button and hovering it over the trash can button hoveringOverButton:trashCanButton]) { // check if user is dragging around a button and hovering it over the trash can button
trashCanButton.tintColor = [UIColor redColor]; trashCanButton.tintColor = [UIColor redColor];
} }
else { else trashCanButton.tintColor = trashCanStoryBoardColor;
trashCanButton.tintColor = [UIColor colorWithRed:171.0/255.0 green:157.0/255.0 blue:255.0/255.0 alpha:1];
}
// -------- for keyboard Buttons
UITouch *touch = [touches anyObject]; // Get the first touch in the set
if([self touchWithinTashcanButton:touch]){
trashCanButton.tintColor = [UIColor redColor];
}
else trashCanButton.tintColor = [UIColor colorWithRed:171.0/255.0 green:157.0/255.0 blue:255.0/255.0 alpha:1];
} }
- (bool)touchWithinTashcanButton:(UITouch* )touch { - (bool)touchWithinTashcanButton:(UITouch* )touch {
@@ -1028,24 +978,34 @@
return ret; return ret;
} }
- (bool)layerOverlapWithTrashcanButton:(CALayer* )layer{
CALayer *commonLayer = self.view.layer; // 假设它们在同一个 superview 下
CGRect rect1 = [layer convertRect:layer.bounds toLayer:commonLayer];
CGRect rect2 = [trashCanButton.layer convertRect:trashCanButton.layer.bounds toLayer:commonLayer];
return CGRectIntersectsRect(rect1, rect2);
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// removing keyboard buttons objs // removing keyboard buttons objs
UITouch *touch = [touches anyObject]; // Get the first touch in the set UITouch *touch = [touches anyObject]; // Get the first touch in the set
if([self touchWithinTashcanButton:touch]){
if(self->selectedWidgetView != nil){ if(selectedWidgetView) [self.view insertSubview:selectedWidgetView belowSubview:_widgetPanelStack];
[self->selectedWidgetView removeFromSuperview];
[self.OnScreenWidgetViews removeObject:self->selectedWidgetView];
[selectedWidgetView.stickBallLayer removeFromSuperlayer]; if(!isToolbarHidden && self->selectedWidgetView != nil && [self layerOverlapWithTrashcanButton:selectedWidgetView.layer]){
[selectedWidgetView.crossMarkLayer removeFromSuperlayer]; [self->selectedWidgetView removeFromSuperview];
[selectedWidgetView.buttonDownVisualEffectLayer removeFromSuperlayer]; [self.OnScreenWidgetViews removeObject:self->selectedWidgetView];
} [selectedWidgetView.stickBallLayer removeFromSuperlayer];
[selectedWidgetView.crossMarkLayer removeFromSuperlayer];
[selectedWidgetView.buttonDownVisualEffectLayer removeFromSuperlayer];
} }
//removing OSC buttons //removing OSC buttons
if (self.layoutOSC.layerBeingDragged != nil && if (!isToolbarHidden && self.layoutOSC.layerBeingDragged != nil &&
[self.layoutOSC isLayer:self.layoutOSC.layerBeingDragged hoveringOverButton:trashCanButton]) { // check if user wants to throw OSC button into the trash can [self.layoutOSC isLayer:self.layoutOSC.layerBeingDragged hoveringOverButton:trashCanButton]) { // check if user wants to throw OSC button into the trash can
// here we're going to delete something // here we're going to delete something
@@ -1078,7 +1038,8 @@
} }
trashCanButton.tintColor = [UIColor colorWithRed:171.0/255.0 green:157.0/255.0 blue:255.0/255.0 alpha:1]; trashCanButton.tintColor = trashCanStoryBoardColor;
widgetPanelMovedByTouch = false;
} }
+76 -16
View File
@@ -1131,7 +1131,7 @@
}, },
"cRV-Xw-CVi.text" : { "cRV-Xw-CVi.text" : {
"comment" : "Class = \"UILabel\"; text = \"Profile:\"; ObjectID = \"cRV-Xw-CVi\";", "comment" : "Class = \"UILabel\"; text = \"Profile:\"; ObjectID = \"cRV-Xw-CVi\";",
"extractionState" : "extracted_with_value", "extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1537,18 +1537,6 @@
} }
} }
}, },
"fKN-ja-TRi.normalTitle" : {
"comment" : "Class = \"UIButton\"; normalTitle = \"Add\"; ObjectID = \"fKN-ja-TRi\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Add"
}
}
}
},
"FwK-oG-vuz.text" : { "FwK-oG-vuz.text" : {
"comment" : "Class = \"UILabel\"; text = \"Reverse Wheel Direction for Physical Mouse \"; ObjectID = \"FwK-oG-vuz\";", "comment" : "Class = \"UILabel\"; text = \"Reverse Wheel Direction for Physical Mouse \"; ObjectID = \"FwK-oG-vuz\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
@@ -1969,6 +1957,18 @@
} }
} }
}, },
"iel-xl-xd9.text" : {
"comment" : "Class = \"UILabel\"; text = \"Profile:\"; ObjectID = \"iel-xl-xd9\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Profile:"
}
}
}
},
"IvI-tw-APj.text" : { "IvI-tw-APj.text" : {
"comment" : "Class = \"UILabel\"; text = \"Open Settings in Stream View by Sliding from: \"; ObjectID = \"IvI-tw-APj\";", "comment" : "Class = \"UILabel\"; text = \"Open Settings in Stream View by Sliding from: \"; ObjectID = \"IvI-tw-APj\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
@@ -3037,6 +3037,18 @@
} }
} }
}, },
"Pwa-YK-6Q2.text" : {
"comment" : "Class = \"UILabel\"; text = \"test\"; ObjectID = \"Pwa-YK-6Q2\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "test"
}
}
}
},
"pYZ-GR-EwO.text" : { "pYZ-GR-EwO.text" : {
"comment" : "Class = \"UILabel\"; text = \"Resolution \"; ObjectID = \"pYZ-GR-EwO\";", "comment" : "Class = \"UILabel\"; text = \"Resolution \"; ObjectID = \"pYZ-GR-EwO\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
@@ -3277,14 +3289,14 @@
} }
} }
}, },
"R45-lM-YPl.normalTitle" : { "r8L-dl-yLZ.text" : {
"comment" : "Class = \"UIButton\"; normalTitle = \"Edit\"; ObjectID = \"R45-lM-YPl\";", "comment" : "Class = \"UILabel\"; text = \"test\"; ObjectID = \"r8L-dl-yLZ\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Edit" "value" : "test"
} }
} }
} }
@@ -3379,6 +3391,18 @@
} }
} }
}, },
"sbd-0j-KWS.text" : {
"comment" : "Class = \"UILabel\"; text = \"test\"; ObjectID = \"sbd-0j-KWS\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "test"
}
}
}
},
"sIU-PH-H7V.segmentTitles[0]" : { "sIU-PH-H7V.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; sIU-PH-H7V.segmentTitles[0] = \"No\"; ObjectID = \"sIU-PH-H7V\";", "comment" : "Class = \"UISegmentedControl\"; sIU-PH-H7V.segmentTitles[0] = \"No\"; ObjectID = \"sIU-PH-H7V\";",
"extractionState" : "stale", "extractionState" : "stale",
@@ -3499,6 +3523,18 @@
} }
} }
}, },
"tG7-oX-P9b.text" : {
"comment" : "Class = \"UILabel\"; text = \"test\"; ObjectID = \"tG7-oX-P9b\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "test"
}
}
}
},
"uSS-ev-IFe.configuration.title" : { "uSS-ev-IFe.configuration.title" : {
"comment" : "Class = \"UIButton\"; configuration.title = \"Back to Streaming\"; ObjectID = \"uSS-ev-IFe\";", "comment" : "Class = \"UIButton\"; configuration.title = \"Back to Streaming\"; ObjectID = \"uSS-ev-IFe\";",
"extractionState" : "stale", "extractionState" : "stale",
@@ -3559,6 +3595,18 @@
} }
} }
}, },
"vJs-pg-hHe.text" : {
"comment" : "Class = \"UILabel\"; text = \"test\"; ObjectID = \"vJs-pg-hHe\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "test"
}
}
}
},
"VWB-YB-Ptj.segmentTitles[0]" : { "VWB-YB-Ptj.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; VWB-YB-Ptj.segmentTitles[0] = \"Stage Manager\"; ObjectID = \"VWB-YB-Ptj\";", "comment" : "Class = \"UISegmentedControl\"; VWB-YB-Ptj.segmentTitles[0] = \"Stage Manager\"; ObjectID = \"VWB-YB-Ptj\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
@@ -3889,6 +3937,18 @@
} }
} }
}, },
"ZuV-4A-0Zb.text" : {
"comment" : "Class = \"UILabel\"; text = \"test\"; ObjectID = \"ZuV-4A-0Zb\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "test"
}
}
}
},
"ZWC-Gw-pSq.text" : { "ZWC-Gw-pSq.text" : {
"comment" : "Class = \"UILabel\"; text = \"Frame Pacing Preference \"; ObjectID = \"ZWC-Gw-pSq\";", "comment" : "Class = \"UILabel\"; text = \"Frame Pacing Preference \"; ObjectID = \"ZWC-Gw-pSq\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",