- settings menu nav more bar button and separatorLine
- settings menu hit test
This commit is contained in:
@@ -64,17 +64,17 @@
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="zpX-lo-MLA" userLabel="ResolutionStack">
|
||||
<rect key="frame" x="16" y="57" width="460" height="111.5"/>
|
||||
<rect key="frame" x="16" y="57" width="380" height="111.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Resolution " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pYZ-GR-EwO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<label opaque="NO" clearsContextBeforeDrawing="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Resolution " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pYZ-GR-EwO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" name=".AppleSystemUIFont" family=".AppleSystemUIFont" pointSize="17"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<size key="shadowOffset" width="0.0" height="0.0"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" apportionsSegmentWidthsByContent="YES" segmentControlStyle="plain" selectedSegmentIndex="5" translatesAutoresizingMaskIntoConstraints="NO" id="ckc-Dm-8ex">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<segmentedControl opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" apportionsSegmentWidthsByContent="YES" segmentControlStyle="plain" selectedSegmentIndex="5" translatesAutoresizingMaskIntoConstraints="NO" id="ckc-Dm-8ex">
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="360p"/>
|
||||
<segment title="720p"/>
|
||||
@@ -84,31 +84,28 @@
|
||||
<segment title="FullScr/Window"/>
|
||||
<segment title="Custom"/>
|
||||
</segments>
|
||||
<color key="tintColor" red="0.6716768741607666" green="0.61711704730987549" blue="0.99902987480163574" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="selectedSegmentTintColor" red="0.6716768741607666" green="0.61711704730987549" blue="0.99902987480163574" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</segmentedControl>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9cG-JD-glb" userLabel="Resolution Display View">
|
||||
<rect key="frame" x="0.0" y="61.5" width="460" height="50"/>
|
||||
<view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9cG-JD-glb" userLabel="Resolution Display View">
|
||||
<rect key="frame" x="0.0" y="61.5" width="380" height="50"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="Rl1-Lh-ToX"/>
|
||||
<constraint firstAttribute="height" constant="111.5" id="ra7-GY-fI5"/>
|
||||
<constraint firstAttribute="width" constant="380" id="bn6-xc-xEZ"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="TuR-H8-e2H" userLabel="FPS Stack">
|
||||
<rect key="frame" x="15" y="177" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="177" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Frame Rate " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Aiv-r8-9k2">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="8hF-kb-2uV" userLabel="Touch Mode Selector">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="30 FPS"/>
|
||||
<segment title="60 FPS"/>
|
||||
@@ -119,39 +116,39 @@
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="qpr-Vh-Pzt"/>
|
||||
<constraint firstAttribute="width" constant="380" id="xzW-J3-1QA"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="2cV-yC-0QL" userLabel="Bitrate Stack">
|
||||
<rect key="frame" x="16" y="246" width="460" height="55.5"/>
|
||||
<rect key="frame" x="16" y="246" width="380" height="55.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Bitrate: 10 Mbps " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="459" translatesAutoresizingMaskIntoConstraints="NO" id="lMt-4H-fkV">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="20" minValue="1" maxValue="100" translatesAutoresizingMaskIntoConstraints="NO" id="JAY-nj-UNz">
|
||||
<rect key="frame" x="-2" y="25.5" width="464" height="31"/>
|
||||
<rect key="frame" x="-2" y="25.5" width="384" height="31"/>
|
||||
<color key="tintColor" red="0.6716768741607666" green="0.61711704730987549" blue="0.99902987480163574" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="UH9-Is-vip"/>
|
||||
<constraint firstAttribute="width" constant="380" id="gWE-l5-EMr"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="M78-Pw-jWx" userLabel="touchMode Stack">
|
||||
<rect key="frame" x="16" y="307" width="460" height="56.5"/>
|
||||
<rect key="frame" x="16" y="307" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Touch Mode " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MUY-2Y-bHi" userLabel="Touch Mode">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="bhC-da-VGd" userLabel="Touch Mode Selector">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="Touchpad"/>
|
||||
<segment title="Native Touch"/>
|
||||
@@ -163,21 +160,21 @@
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="re2-yz-aj0"/>
|
||||
<constraint firstAttribute="width" constant="380" id="Yf1-gv-h0d"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="aP7-M9-psT" userLabel="asyncTouch stack">
|
||||
<rect key="frame" x="16" y="516" width="460" height="56.5"/>
|
||||
<rect key="frame" x="16" y="516" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Async Native Touch" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="2Bp-XZ-cCw">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="390" height="20.5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="AXb-DO-LzB" userLabel="asyncNativeTouchPrioritySelector">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Yes"/>
|
||||
@@ -187,14 +184,14 @@
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="i25-f4-1rb"/>
|
||||
<constraint firstAttribute="width" constant="380" id="q0h-IS-VR8"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="b1U-nD-gYE" userLabel="pointerVelocityDivider Stack">
|
||||
<rect key="frame" x="15" y="382" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="382" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Touch Pointer Velocity: Scaled on 0% of Right Screen " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="DkI-w6-jku" userLabel="pointerVelocityModeDivider">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="18.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="390" height="18.5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
@@ -202,20 +199,20 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="100" minValue="0.0" maxValue="100" id="AcZ-2i-GI4" userLabel="pointerVelocityModeDivider">
|
||||
<rect key="frame" x="-2" y="23.5" width="464" height="34"/>
|
||||
<rect key="frame" x="-2" y="23.5" width="394" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="lIJ-ng-fBn"/>
|
||||
<constraint firstAttribute="width" constant="380" id="RXd-vz-m6R"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="vdk-mK-ztu" userLabel="PointerVelocityFactor stack">
|
||||
<rect key="frame" x="15" y="446" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="446" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Touch Pointer Velocity: 100% " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="egA-7n-Dpe" userLabel="touchPointerVelocityFactor">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="18.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="390" height="18.5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
@@ -223,20 +220,20 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="100" minValue="0.0" maxValue="300" id="TVV-EU-Rw1" userLabel="touchPointerVelocityFactor">
|
||||
<rect key="frame" x="-2" y="23.5" width="464" height="34"/>
|
||||
<rect key="frame" x="-2" y="23.5" width="394" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="3dX-xl-guY"/>
|
||||
<constraint firstAttribute="width" constant="380" id="bsW-FT-A7X"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="iYl-5Z-ujb" userLabel="touchMoveEventInterval Stack">
|
||||
<rect key="frame" x="16" y="593" width="460" height="56.5"/>
|
||||
<rect key="frame" x="16" y="593" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Interval of Multi-Touch Move Events: 200 us " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="FJv-HJ-UYJ" userLabel="touchMoveEventIntervalLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="18.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="390" height="18.5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
@@ -244,20 +241,20 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="150" minValue="0.0" maxValue="3600" id="4gD-tc-95I" userLabel="touchMoveEventIntervalSlider">
|
||||
<rect key="frame" x="-2" y="23.5" width="464" height="34"/>
|
||||
<rect key="frame" x="-2" y="23.5" width="394" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="eV8-59-R0c"/>
|
||||
<constraint firstAttribute="width" constant="380" id="F1i-tE-t0J"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="aQ8-4e-CQB" userLabel="mousePointerVelocity Stack">
|
||||
<rect key="frame" x="17" y="666" width="460" height="56.5"/>
|
||||
<rect key="frame" x="17" y="666" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Mouse Pointer Velocity: 100% " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="oPM-G6-u5O" userLabel="mousePointerVelocityFactor">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="18.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="390" height="18.5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
@@ -265,27 +262,27 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="100" minValue="0.0" maxValue="300" id="Ei2-FJ-9oC" userLabel="mousePointerVelocityFactor">
|
||||
<rect key="frame" x="-2" y="23.5" width="464" height="34"/>
|
||||
<rect key="frame" x="-2" y="23.5" width="394" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="T9d-Dz-mKt"/>
|
||||
<constraint firstAttribute="width" constant="380" id="CnH-QX-ugs"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="ziJ-RC-xkP" userLabel="onScreenWidget Stack">
|
||||
<rect key="frame" x="16" y="730" width="460" height="56.5"/>
|
||||
<rect key="frame" x="16" y="730" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="On-Screen Controls & Widgets " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LGV-5y-piG">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="qSU-wh-tqA">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="Off"/>
|
||||
<segment title="Simple"/>
|
||||
@@ -297,14 +294,14 @@
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="0q4-Se-Tph"/>
|
||||
<constraint firstAttribute="width" constant="380" id="RoD-rl-0Us"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Tv6-pw-87l" userLabel="keyboardToggleFingerNum Stack">
|
||||
<rect key="frame" x="17" y="806" width="460" height="56.5"/>
|
||||
<rect key="frame" x="17" y="806" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="nh6-cn-z23">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="18.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="390" height="18.5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<string key="text" base64-UTF8="YES">
|
||||
@@ -316,27 +313,27 @@ ICAgICAgICAgICAgICA
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="3" minValue="3" maxValue="13" id="4wJ-Gd-Dmp">
|
||||
<rect key="frame" x="-2" y="23.5" width="464" height="34"/>
|
||||
<rect key="frame" x="-2" y="23.5" width="394" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="GAQ-4o-iws"/>
|
||||
<constraint firstAttribute="width" constant="380" id="1bX-IR-Vkj"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="mes-so-dfK" userLabel="liftStreamViewForKeyboard Stack">
|
||||
<rect key="frame" x="17" y="880" width="460" height="56.5"/>
|
||||
<rect key="frame" x="17" y="880" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Lift Stream View for Local Keyboard " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QYJ-84-bvc">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="390" height="20.5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="MM5-O0-vK3" userLabel="liftStreamViewForKeyboardSelector">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Yes"/>
|
||||
@@ -346,21 +343,21 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="5dM-fA-aDa"/>
|
||||
<constraint firstAttribute="width" constant="380" id="PUU-5U-2dC"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="90g-DY-GKi" userLabel="showKeyboardToolbar Stack">
|
||||
<rect key="frame" x="15" y="959" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="959" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Show Local Keyboard Toolbar " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="aup-5k-z6P">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="390" height="20.5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="KJd-PE-5cS" userLabel="Show Local Keyboard Toolbar Selector">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Yes"/>
|
||||
@@ -370,21 +367,21 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="Why-HN-gE4"/>
|
||||
<constraint firstAttribute="width" constant="380" id="cHp-hJ-PUQ"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="tgA-05-vWV" userLabel="slideToSettingsScreenEdge Stack">
|
||||
<rect key="frame" x="15" y="1035" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="1035" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Open Settings in Stream View by Sliding from: " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IvI-tw-APj">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="Mm0-xf-9eh">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="Left Screen Edge"/>
|
||||
<segment title="Right Screen Edge"/>
|
||||
@@ -394,21 +391,21 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="g52-RC-TIz"/>
|
||||
<constraint firstAttribute="width" constant="380" id="WEi-Im-NuH"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="msN-pa-Kn3" userLabel="slideToCmdToolScreenEdge Stack">
|
||||
<rect key="frame" x="15" y="1111" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="1111" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Open Command Tool in Stream View by Sliding from: " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zp4-fA-IeL">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" id="yY7-Sf-Zes" userLabel="Command Sending Screen Edge Selector">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="390" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<segments>
|
||||
<segment title="Left Screen Edge"/>
|
||||
@@ -419,41 +416,41 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="wzc-7i-2TE"/>
|
||||
<constraint firstAttribute="width" constant="380" id="UAl-Go-PQV"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="pN7-bs-8yu" userLabel="slideToSettingsDistance Stack">
|
||||
<rect key="frame" x="16" y="1185" width="460" height="56.5"/>
|
||||
<rect key="frame" x="16" y="1185" width="0.0" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Slide Distance for Stream View Menu: 0.5 * screen-width " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="pMN-6T-aYE" userLabel="Slide To Settings Distance UI Label">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="18.5"/>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="Slide Distance for Stream View Menu: 0.5 * screen-width " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="pMN-6T-aYE" userLabel="Slide To Settings Distance UI Label">
|
||||
<rect key="frame" x="0.0" y="0.0" width="0.0" height="18.5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" id="8p6-FP-UWP">
|
||||
<rect key="frame" x="-2" y="23.5" width="464" height="34"/>
|
||||
<slider opaque="NO" contentMode="scaleToFill" ambiguous="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" id="8p6-FP-UWP">
|
||||
<rect key="frame" x="-2" y="23.5" width="4" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="T08-lQ-3kS"/>
|
||||
<constraint firstAttribute="width" constant="380" id="w5M-ho-mWm"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Vqp-65-BQP" userLabel="optimizeSettings Stack">
|
||||
<rect key="frame" x="15" y="1249" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="1249" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Optimize Game Settings " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WSI-9V-G6c">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="Awc-Oh-s9n" userLabel="Optimize Settings Selector">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Yes"/>
|
||||
@@ -463,20 +460,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="hqi-fl-X1c"/>
|
||||
<constraint firstAttribute="width" constant="380" id="0Aq-El-ROg"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="LhF-d1-2Qk" userLabel="multiController Stack">
|
||||
<rect key="frame" x="15" y="1322" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="1322" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Multi-Controller Mode " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bFD-Ng-abn">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="KlC-fG-wEi" userLabel="MC Selector">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Auto"/>
|
||||
@@ -486,20 +483,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="JR1-wK-iKs"/>
|
||||
<constraint firstAttribute="width" constant="380" id="vGg-fB-yFk"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="2GS-cX-u4i" userLabel="swapABXYButtons Stack">
|
||||
<rect key="frame" x="15" y="1393" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="1393" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Swap A/B and X/Y Buttons " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dll-7x-18l">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="dpd-Bw-aHE" userLabel="Swap A/B and X/Y Buttons">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Yes"/>
|
||||
@@ -509,20 +506,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="gID-d1-2iF"/>
|
||||
<constraint firstAttribute="width" constant="380" id="Mi8-19-kyX"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="bu9-4a-Uqc" userLabel="audioOnPC Stack">
|
||||
<rect key="frame" x="15" y="1466" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="1466" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Play Audio on PC " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fXq-oD-MrL">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="gid-cU-pV9" userLabel="Play Audio on PC ">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Yes"/>
|
||||
@@ -532,20 +529,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="qpG-8k-Xan"/>
|
||||
<constraint firstAttribute="width" constant="380" id="GoH-n9-mnV"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="gWg-BF-yDI" userLabel="codec Stack">
|
||||
<rect key="frame" x="16" y="1540" width="460" height="56.5"/>
|
||||
<rect key="frame" x="16" y="1540" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Preferred Codec " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6w5-Md-NpV" userLabel="Preferred Codec">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="3" translatesAutoresizingMaskIntoConstraints="NO" id="aFy-0w-YPe" userLabel="Codec Selector">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="H.264"/>
|
||||
<segment title="HEVC"/>
|
||||
@@ -557,20 +554,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="yBZ-uI-2ie"/>
|
||||
<constraint firstAttribute="width" constant="380" id="2q2-Xb-Ubk"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="qmS-0e-0jd" userLabel="yuv444 Stack">
|
||||
<rect key="frame" x="17" y="1614" width="460" height="56.5"/>
|
||||
<rect key="frame" x="17" y="1614" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enable YUV 4:4:4 (Beta)" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OHY-2z-Tm7">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="D2u-4j-7kg" userLabel="Enable YUV 4:4:4 (Beta)">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Yes"/>
|
||||
@@ -580,20 +577,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="DJQ-Xv-03e"/>
|
||||
<constraint firstAttribute="width" constant="380" id="FLZ-lq-4Lc"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="wTQ-T2-A6b" userLabel="HDR Stack">
|
||||
<rect key="frame" x="15" y="1686" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="1686" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="HDR (Beta) " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bZL-t1-mk7">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="RRk-03-hIr" userLabel="HDR (Beta) ">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Yes"/>
|
||||
@@ -603,20 +600,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="BRo-yL-qFC"/>
|
||||
<constraint firstAttribute="width" constant="380" id="DHv-Aj-imR"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="9C2-td-rMV" userLabel="framepacing Stack">
|
||||
<rect key="frame" x="15" y="1759" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="1759" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Frame Pacing Preference " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZWC-Gw-pSq">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="OOg-A3-DdM" userLabel="External Display Mode">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="Lowest Latency"/>
|
||||
<segment title="Smoothest Video"/>
|
||||
@@ -626,20 +623,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="Hui-r7-giH"/>
|
||||
<constraint firstAttribute="width" constant="380" id="9oT-Rs-K4T"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="2P0-Tg-zWd" userLabel="reverseMouseWheelDirection Stack">
|
||||
<rect key="frame" x="15" y="1831" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="1831" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Reverse Wheel Direction for Physical Mouse " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FwK-oG-vuz">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="mTM-NL-CcF" userLabel="Reverse Wheel Direction for Physical Mouse ">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Yes"/>
|
||||
@@ -649,20 +646,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="6Et-LC-aA6"/>
|
||||
<constraint firstAttribute="width" constant="380" id="S9G-oL-OV0"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="77p-qt-4ak" userLabel="citrixX1Mouse Stack">
|
||||
<rect key="frame" x="15" y="1908" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="1908" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Citrix X1 Mouse Support " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t9f-V8-GCm">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="goy-IW-LuT" userLabel="Citrix X1 Mouse Support ">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Yes"/>
|
||||
@@ -672,20 +669,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="PlS-Ud-T4y"/>
|
||||
<constraint firstAttribute="width" constant="380" id="fpF-ZU-wFe"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="UcP-0b-nJD" userLabel="statsOverlay Stack">
|
||||
<rect key="frame" x="15" y="1985" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="1985" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Statistics Overlay " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="s2i-ZL-Gz4" userLabel="Statistics Overlay">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="NLH-qN-qCo" userLabel="Statistics Overlay Selector">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="Off"/>
|
||||
<segment title="Simplified"/>
|
||||
@@ -696,20 +693,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="4e5-RX-NeX"/>
|
||||
<constraint firstAttribute="width" constant="380" id="7al-D7-HS5"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="5dA-cw-gOa" userLabel="unlockDisplayOrientation Stack">
|
||||
<rect key="frame" x="16" y="2062" width="460" height="56.5"/>
|
||||
<rect key="frame" x="16" y="2062" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Allow 90° Display Rotation in Steaming" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hAo-1k-oYF" userLabel="Lock Display Orientation">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="1" translatesAutoresizingMaskIntoConstraints="NO" id="KNe-bN-CDb" userLabel="Allow 90° Display Rotation in Steaming">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="No"/>
|
||||
<segment title="Yes"/>
|
||||
@@ -719,20 +716,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="da9-ef-ArJ"/>
|
||||
<constraint firstAttribute="width" constant="380" id="dvp-zp-nLG"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="YBu-VX-wpN" userLabel="externalDisplayMode Stack">
|
||||
<rect key="frame" x="15" y="2138" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="2138" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="External Display Mode" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Qy-hB-oa5">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="VWB-YB-Ptj" userLabel="External Display Mode">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="Stage Manager"/>
|
||||
<segment title="AirPlay"/>
|
||||
@@ -742,20 +739,20 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="c68-Wd-5wC"/>
|
||||
<constraint firstAttribute="width" constant="380" id="aWm-nm-oQI"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="nE1-Al-qRc" userLabel="localMousePointerMode Stack">
|
||||
<rect key="frame" x="15" y="2213" width="460" height="56.5"/>
|
||||
<rect key="frame" x="15" y="2213" width="380" height="56.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Local Mouse Pointer" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tAd-bm-2IO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="460" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="4FU-iP-c6T" userLabel="Mouse Mode">
|
||||
<rect key="frame" x="0.0" y="25.5" width="460" height="32"/>
|
||||
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
|
||||
<segments>
|
||||
<segment title="Restricted by Window"/>
|
||||
<segment title="Hidden"/>
|
||||
@@ -766,11 +763,11 @@ ICAgICAgICAgICAgICA
|
||||
</segmentedControl>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="460" id="Glp-9K-RT2"/>
|
||||
<constraint firstAttribute="width" constant="380" id="pq3-mC-fjA"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" systemColor="viewFlipsideBackgroundColor"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</view>
|
||||
<size key="freeformSize" width="682" height="2500"/>
|
||||
<connections>
|
||||
@@ -858,7 +855,7 @@ ICAgICAgICAgICAgICA
|
||||
</items>
|
||||
</navigationBar>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="536.69064748201447" y="1215.5778894472362"/>
|
||||
<point key="canvasLocation" x="536.69064748201447" y="1215.3719008264463"/>
|
||||
</scene>
|
||||
<!--Reveal View Controller-->
|
||||
<scene sceneID="rR7-ZT-bc7">
|
||||
@@ -889,8 +886,7 @@ ICAgICAgICAgICAgICA
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" barStyle="black" translucent="NO" id="RUe-14-4Ya">
|
||||
<rect key="frame" x="0.0" y="24" width="834" height="50"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<color key="backgroundColor" red="0.66666668653488159" green="0.66666668653488159" blue="0.66666668653488159" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="barTintColor" red="0.66666668653488159" green="0.66666668653488159" blue="0.66666668653488159" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</navigationBar>
|
||||
<connections>
|
||||
<segue destination="wb7-af-jn8" kind="relationship" relationship="rootViewController" id="nkY-JG-Wki"/>
|
||||
@@ -898,7 +894,7 @@ ICAgICAgICAgICAgICA
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iLe-Yz-zIG" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-310.15625" y="301.171875"/>
|
||||
<point key="canvasLocation" x="-257" y="279"/>
|
||||
</scene>
|
||||
<!--Stream Frame View Controller-->
|
||||
<scene sceneID="RuD-qk-7nb">
|
||||
@@ -1271,16 +1267,13 @@ ICAgICAgICAgICAgICA
|
||||
<image name="SquaresArrowUp" width="40" height="40"/>
|
||||
<image name="Trash" width="40" height="40"/>
|
||||
<systemColor name="secondaryLabelColor">
|
||||
<color red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="systemBackgroundColor">
|
||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</systemColor>
|
||||
<systemColor name="systemBrownColor">
|
||||
<color red="0.63529411764705879" green="0.51764705882352946" blue="0.36862745098039218" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="viewFlipsideBackgroundColor">
|
||||
<color red="0.12156862745098039" green="0.12941176470588237" blue="0.14117647058823529" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color red="0.63529411759999999" green="0.51764705879999995" blue="0.36862745099999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="22505" 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"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
@@ -13,7 +13,7 @@
|
||||
<objects>
|
||||
<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">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="804"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="756"/>
|
||||
<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"/>
|
||||
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="15" minimumInteritemSpacing="15" id="YcZ-cR-3tK">
|
||||
@@ -43,7 +43,8 @@
|
||||
<barButtonItem key="rightBarButtonItem" id="KDy-JC-2sU"/>
|
||||
</navigationItem>
|
||||
<connections>
|
||||
<outlet property="settingsButton" destination="mSL-ru-nRm" id="NRf-lv-vlh"/>
|
||||
<outlet property="navigationItem" destination="pSu-bl-gL9" id="bvt-g6-wbk"/>
|
||||
<outlet property="settingsButton" destination="mSL-ru-nRm" id="6mC-zU-buT"/>
|
||||
<outlet property="upButton" destination="KDy-JC-2sU" id="tXB-Rc-IvJ"/>
|
||||
<segue destination="mI3-9F-XwU" kind="push" identifier="createStreamFrame" id="NuQ-Ez-IEX"/>
|
||||
</connections>
|
||||
@@ -648,7 +649,7 @@ ICAgICAgICAgICAgIA
|
||||
<objects>
|
||||
<navigationController id="ftZ-kC-fxI" sceneMemberID="viewController">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" barStyle="black" translucent="NO" id="0ZA-Ec-QgD">
|
||||
<rect key="frame" x="0.0" y="48" width="414" height="44"/>
|
||||
<rect key="frame" x="0.0" y="96" width="414" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<color key="backgroundColor" red="0.66666668653488159" green="0.66666668653488159" blue="0.66666668653488159" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="barTintColor" red="0.66666668653488159" green="0.66666668653488159" blue="0.66666668653488159" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
@@ -955,12 +956,12 @@ ICAgICAgICAgICAgIA
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView opaque="NO" clearsContextBeforeDrawing="NO" alpha="0.5" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="kTH-ez-aKD">
|
||||
<rect key="frame" x="80" y="48" width="692" height="325"/>
|
||||
<rect key="frame" x="80" y="96" width="692" height="277"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<color key="sectionIndexBackgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</tableView>
|
||||
<navigationBar contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zsA-6X-Qc5">
|
||||
<rect key="frame" x="80" y="48" width="692" height="44"/>
|
||||
<rect key="frame" x="80" y="96" width="692" height="44"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="44" id="R90-2b-UrU"/>
|
||||
</constraints>
|
||||
|
||||
@@ -61,7 +61,6 @@ static const float REFRESH_CYCLE = 2.0f;
|
||||
defaultGreen = [UIColor colorWithRed:52.0/255.0 green:199.0/255.0 blue:89.0/255.0 alpha:1.0];
|
||||
// self.userIterfaceStyle = UIUserInterfaceStyleLight
|
||||
if (@available(iOS 13.0, *)) {
|
||||
NSLog(@"ttesttttt");
|
||||
UIContextMenuInteraction* longPressInteraction = [[UIContextMenuInteraction alloc] initWithDelegate:self];
|
||||
[self addInteraction:longPressInteraction];
|
||||
self.userInteractionEnabled = YES;
|
||||
@@ -154,7 +153,6 @@ static const float REFRESH_CYCLE = 2.0f;
|
||||
|
||||
- (UIContextMenuConfiguration *)contextMenuInteraction:(UIContextMenuInteraction *)interaction
|
||||
configurationForMenuAtLocation:(CGPoint)location API_AVAILABLE(ios(13.0)){
|
||||
NSLog(@"long tap test");
|
||||
longPressFired = true;
|
||||
if ([self.delegate respondsToSelector:@selector(hostCardLongPressed:view:)]) {
|
||||
[self.delegate hostCardLongPressed:_host view:self];
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "disconnect.svg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="31" height="31" viewBox="0 0 256 256" enable-background="new 0 0 256 256" xml:space="preserve">
|
||||
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
|
||||
<g><g><path fill="#000000" d="M25.6,71.8h29.8v15.5H25.6V71.8z"/><path fill="#000000" d="M75,22.4h15.5v29.8H75V22.4z"/><path fill="#000000" d="M96.3,212.6c-14.6,14.6-38.3,14.6-52.9,0c-14.6-14.6-14.6-38.3,0-52.9l42.3-42.3l-15.9-15.9l-42.3,42.3c-23.4,23.4-23.4,61.2,0,84.6c23.3,23.3,61.2,23.4,84.6,0l42.3-42.3l-15.9-15.9L96.3,212.6z"/><path fill="#000000" d="M48,33.8l21.1,21.1L58.1,65.8L37,44.8L48,33.8z"/><path fill="#000000" d="M208.1,215.8L187,194.7l10.9-10.9l21.1,21.1L208.1,215.8z"/><path fill="#000000" d="M200.6,162.4h29.8v15.5h-29.8V162.4z"/><path fill="#000000" d="M165.5,197.5H181v29.8h-15.5V197.5z"/><path fill="#000000" d="M228.5,27.5c-23.3-23.3-61.2-23.4-84.6,0l-42.3,42.3l15.9,15.9l42.3-42.3c14.6-14.6,38.3-14.6,52.9,0c14.6,14.6,14.6,38.3,0,52.9l-42.3,42.3l15.9,15.9l42.3-42.3C251.9,88.7,251.8,50.9,228.5,27.5z"/></g></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -8,6 +8,7 @@
|
||||
// MenuSectionView.m
|
||||
|
||||
#import "MenuSectionView.h"
|
||||
#import "ThemeManager.h"
|
||||
|
||||
@interface MenuSectionView ()
|
||||
|
||||
@@ -67,13 +68,14 @@
|
||||
_iconImageView = [[UIImageView alloc] init];
|
||||
_iconImageView.contentMode = UIViewContentModeScaleAspectFit;
|
||||
_iconImageView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
_iconImageView.tintColor = [UIColor whiteColor];
|
||||
_iconImageView.tintColor = [ThemeManager textColor];
|
||||
[_headerView addSubview:_iconImageView];
|
||||
|
||||
// 标题标签
|
||||
_titleLabel = [[UILabel alloc] init];
|
||||
_titleLabel.text = _sectionTitle;
|
||||
_titleLabel.font = [UIFont systemFontOfSize:27 weight:UIFontWeightMedium];
|
||||
_titleLabel.textColor = [ThemeManager textColor];
|
||||
_titleLabel.textAlignment = NSTextAlignmentLeft;
|
||||
_titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
[_headerView addSubview:_titleLabel];
|
||||
@@ -105,7 +107,7 @@
|
||||
|
||||
// 分隔线
|
||||
_separatorLine = [[UIView alloc] init];
|
||||
_separatorLine.backgroundColor = [UIColor colorWithWhite:0.2 alpha:5.0];
|
||||
_separatorLine.backgroundColor = [ThemeManager separatorColor];
|
||||
_separatorLine.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
|
||||
[self addSubview:_separatorLine];
|
||||
@@ -187,7 +189,14 @@
|
||||
#pragma mark - Public Methods
|
||||
|
||||
- (void)setSectionIcon:(UIImage *)icon {
|
||||
_iconImageView.image = icon;
|
||||
if (@available(iOS 13.0, *)) {
|
||||
UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration configurationWithWeight:UIImageSymbolWeightSemibold];
|
||||
_iconImageView.image = [icon imageWithConfiguration:config];
|
||||
|
||||
} else {
|
||||
_iconImageView.image = icon;
|
||||
}
|
||||
|
||||
_iconImageView.hidden = (icon == nil);
|
||||
[self updateLayout];
|
||||
}
|
||||
@@ -287,7 +296,7 @@
|
||||
[self setupConstraints];
|
||||
if (_expanded) {
|
||||
_rootStackView.hidden = NO;
|
||||
_separatorLine.hidden = NO;
|
||||
_separatorLine.hidden = YES;
|
||||
CGSize fittingSize = [self.rootStackView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
|
||||
CGFloat rootStackViewHeight = fittingSize.height;
|
||||
fittingSize = [self.headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
|
||||
|
||||
@@ -47,6 +47,7 @@ static UIUserInterfaceStyle _userInterfaceStyle;
|
||||
case UIUserInterfaceStyleDark:
|
||||
default:
|
||||
return [UIColor colorWithRed:28.0/255.0 green:28.0/255.0 blue:30.0/255.0 alpha:1.0];
|
||||
//return [UIColor blackColor];
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -68,12 +69,10 @@ static UIUserInterfaceStyle _userInterfaceStyle;
|
||||
[ThemeManager getUIStyle];
|
||||
switch (self.userInterfaceStyle) {
|
||||
case UIUserInterfaceStyleLight:
|
||||
NSLog(@"themeLightSP");
|
||||
return [UIColor colorWithWhite:0.1 alpha:0.28];
|
||||
break;
|
||||
case UIUserInterfaceStyleDark:
|
||||
default:
|
||||
NSLog(@"themeDarkSP");
|
||||
return [UIColor colorWithWhite:0.28 alpha:1.0];
|
||||
break;
|
||||
}
|
||||
@@ -84,12 +83,10 @@ static UIUserInterfaceStyle _userInterfaceStyle;
|
||||
[ThemeManager getUIStyle];
|
||||
switch (self.userInterfaceStyle) {
|
||||
case UIUserInterfaceStyleLight:
|
||||
NSLog(@"themeLightTX");
|
||||
return [UIColor blackColor];
|
||||
break;
|
||||
case UIUserInterfaceStyleDark:
|
||||
default:
|
||||
NSLog(@"themeDarkTX");
|
||||
return [UIColor whiteColor];
|
||||
break;
|
||||
}
|
||||
@@ -100,7 +97,7 @@ static UIUserInterfaceStyle _userInterfaceStyle;
|
||||
}
|
||||
|
||||
+ (UIColor *)appSecondaryColor {
|
||||
return [UIColor colorWithRed:0.0 green:0.48 blue:1.0 alpha:1.0]; // 可换其他常用色
|
||||
return [UIColor colorWithRed:0.0 green:0.319 blue:0.64 alpha:1.0]; // 可换其他常用色
|
||||
}
|
||||
|
||||
+ (UIColor *)appPrimaryColorWithAlpha {
|
||||
|
||||
@@ -142,7 +142,6 @@ static UIImage* noImage;
|
||||
if (appImage != nil) {
|
||||
// This size of image might be blank image received from GameStream.
|
||||
|
||||
//AppImage TESTTTTTTTT
|
||||
// TODO: Improve no-app image detection
|
||||
if (!(appImage.size.width == 130.f && appImage.size.height == 180.f) && // GFE 2.0
|
||||
!(appImage.size.width == 628.f && appImage.size.height == 888.f)){
|
||||
|
||||
@@ -73,11 +73,21 @@ static const CGFloat cellOffsetY = 20;
|
||||
|
||||
@implementation HostCollectionViewController{
|
||||
UICollectionViewFlowLayout *layout;
|
||||
CGFloat _horizontalPadding;
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
layout = [[UICollectionViewFlowLayout alloc] init];
|
||||
layout.sectionInset = UIEdgeInsetsMake(7, 0, 0, 0); // 上、左、下、右的间距
|
||||
switch ([UIDevice currentDevice].userInterfaceIdiom) {
|
||||
case UIUserInterfaceIdiomPhone:
|
||||
_horizontalPadding = 5;
|
||||
break;
|
||||
case UIUserInterfaceIdiomPad:
|
||||
default:
|
||||
_horizontalPadding = 75;
|
||||
break;
|
||||
}
|
||||
layout.sectionInset = UIEdgeInsetsMake(7, _horizontalPadding, 0, _horizontalPadding); // 上、左、下、右的间距
|
||||
if (self = [super initWithCollectionViewLayout:layout]) {
|
||||
_interItemMinimumSpacing = 10;
|
||||
_minimumLineSpacing = 10;
|
||||
@@ -177,9 +187,9 @@ static const CGFloat cellOffsetY = 20;
|
||||
_collectionViewHeightConstraint.constant = contentHeight;
|
||||
}
|
||||
|
||||
if([self numberOfRowsInCollectionView]<=2 && !contentExceedsView) layout.sectionInset = UIEdgeInsetsMake(50, 0, 0, 0);
|
||||
if([self numberOfRowsInCollectionView]>2 && !contentExceedsView) layout.sectionInset = UIEdgeInsetsMake(25, 0, 0, 0);
|
||||
if(contentExceedsView) layout.sectionInset = UIEdgeInsetsMake(7, 0, 0, 0);
|
||||
if([self numberOfRowsInCollectionView]<=2 && !contentExceedsView) layout.sectionInset = UIEdgeInsetsMake(50, _horizontalPadding, 0, _horizontalPadding);
|
||||
if([self numberOfRowsInCollectionView]>2 && !contentExceedsView) layout.sectionInset = UIEdgeInsetsMake(25, _horizontalPadding, 0, _horizontalPadding);
|
||||
if(contentExceedsView) layout.sectionInset = UIEdgeInsetsMake(7, _horizontalPadding, 0, _horizontalPadding);
|
||||
}
|
||||
|
||||
#pragma mark - UICollectionView DataSource
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIBarButtonItem *settingsButton;
|
||||
#if !TARGET_OS_TV
|
||||
@property (weak, nonatomic) IBOutlet UIBarButtonItem *upButton;
|
||||
@property (nonatomic, assign) bool settingsExpandedInStreamView;
|
||||
@property (nonatomic, strong) HostCollectionViewController *hostCollectionVC;
|
||||
@property (weak, nonatomic) IBOutlet UINavigationItem *navigationItem;
|
||||
|
||||
@@ -48,8 +48,10 @@
|
||||
|
||||
@implementation MainFrameViewController {
|
||||
UILabel* waterMark;
|
||||
UIBarButtonItem* addHostButton;
|
||||
UIBarButtonItem* helpButton;
|
||||
UIBarButtonItem* _addHostButton;
|
||||
UIBarButtonItem* _helpButton;
|
||||
UIBarButtonItem* _upButton;
|
||||
|
||||
UILabel* hostViewTitleLabel;
|
||||
//CGFloat recordedScreenWidth;
|
||||
NSOperationQueue* _opQueue;
|
||||
@@ -66,6 +68,9 @@
|
||||
NSArray* _sortedAppList;
|
||||
NSCache* _boxArtCache;
|
||||
bool _background;
|
||||
UINavigationBarAppearance *navBarAppearanceStandard;
|
||||
UINavigationBarAppearance *navBarAppearanceScroll;
|
||||
|
||||
#if TARGET_OS_TV
|
||||
UITapGestureRecognizer* _menuRecognizer;
|
||||
#endif
|
||||
@@ -131,10 +136,12 @@ static NSMutableSet* hostList;
|
||||
|
||||
- (void)updateTitle {
|
||||
|
||||
self.navigationController.navigationBar.titleTextAttributes = @{
|
||||
NSFontAttributeName: [UIFont systemFontOfSize:20 weight:UIFontWeightMedium],
|
||||
NSForegroundColorAttributeName: [ThemeManager textColor] // 可选,设置标题颜色
|
||||
};
|
||||
if (@available(iOS 13.0, *)) {
|
||||
navBarAppearanceScroll.titleTextAttributes = navBarAppearanceStandard.titleTextAttributes = @{
|
||||
NSFontAttributeName: [UIFont systemFontOfSize:20 weight:UIFontWeightMedium],
|
||||
NSForegroundColorAttributeName: [ThemeManager textColor] // 可选,设置标题颜色
|
||||
};
|
||||
}
|
||||
|
||||
if (_selectedHost != nil) {
|
||||
self.title = _selectedHost.name;
|
||||
@@ -144,13 +151,25 @@ static NSMutableSet* hostList;
|
||||
self.title = [LocalizationHelper localizedStringForKey: @"Searching for PCs on your network..."] ;
|
||||
}
|
||||
else {
|
||||
if (@available(iOS 13.0, *)) {
|
||||
navBarAppearanceScroll.titleTextAttributes = navBarAppearanceStandard.titleTextAttributes = @{
|
||||
NSFontAttributeName: [UIFont systemFontOfSize:24 weight:UIFontWeightSemibold],
|
||||
NSForegroundColorAttributeName: [ThemeManager textColor] // 可选,设置标题颜色
|
||||
};
|
||||
}
|
||||
/*
|
||||
self.navigationController.navigationBar.titleTextAttributes = @{
|
||||
NSFontAttributeName: [UIFont systemFontOfSize:24 weight:UIFontWeightSemibold],
|
||||
NSForegroundColorAttributeName: [ThemeManager textColor] // 可选,设置标题颜色
|
||||
};
|
||||
};*/
|
||||
self.title = [LocalizationHelper localizedStringForKey: @"Hosts" ];
|
||||
//self.title = nil;
|
||||
}
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[self applyNavBarAppearance];
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
}
|
||||
|
||||
- (void)alreadyPaired {
|
||||
@@ -311,10 +330,11 @@ static NSMutableSet* hostList;
|
||||
_selectedHost = nil;
|
||||
_sortedAppList = nil;
|
||||
|
||||
[self.collectionView removeFromSuperview]; // necessary for new scroll host view reloading mechanism
|
||||
// [self.collectionView removeFromSuperview]; // necessary for new scroll host view reloading mechanism
|
||||
self.hostCollectionVC.view.hidden = NO;
|
||||
self.collectionView.hidden = YES;
|
||||
[self updateTitle];
|
||||
self.navigationItem.rightBarButtonItems = @[helpButton, addHostButton];
|
||||
[self->_upButton setTitle:nil];
|
||||
self.navigationItem.rightBarButtonItems = @[_helpButton, _addHostButton];
|
||||
self.revealViewController.mainFrameIsInHostView = true; // to allow orientation change only in app view, tell top view controller the mainframe is not in host view
|
||||
}
|
||||
|
||||
@@ -341,14 +361,19 @@ static NSMutableSet* hostList;
|
||||
//_appManager = [[AppAssetManager alloc] initWithCallback:self];
|
||||
[self.collectionView setCollectionViewLayout:self.collectionViewLayout];
|
||||
[self.collectionView reloadData]; //for new scroll host view reloading mechanism
|
||||
[self.view addSubview:self.collectionView]; //for new scroll host view reloading mechanism
|
||||
// [self.view bringSubviewToFront:self.collectionView];
|
||||
self.hostCollectionVC.view.hidden = YES;
|
||||
self.collectionView.hidden = NO;
|
||||
self.collectionView.backgroundColor = [ThemeManager appBackgroundColor];
|
||||
[self attachWaterMark];
|
||||
[self->_upButton setTitle: [LocalizationHelper localizedStringForKey: @"Select New Host"]];
|
||||
self.navigationItem.rightBarButtonItems = @[_upButton];
|
||||
self.revealViewController.mainFrameIsInHostView = false;
|
||||
// [self disableNavigation];
|
||||
[self updateTitle];
|
||||
[self alreadyPaired];
|
||||
// self.navigationController.navigationBar.backgroundColor = [ThemeManager appBackgroundColor];
|
||||
// self.navigationController.navigationBar.translucent = NO;
|
||||
//[self applyNavBarAppearance:navBarAppearance];
|
||||
}
|
||||
|
||||
- (void)appButtonTappedForHost:(TemporaryHost *)host {
|
||||
@@ -1038,12 +1063,6 @@ static NSMutableSet* hostList;
|
||||
}
|
||||
|
||||
#if !TARGET_OS_TV
|
||||
// this method is deprecated
|
||||
- (void)simulateSettingsButtonPressClose { //force expand settings view to update resolution table, and all setting includes current fullscreen resolution will be updated.
|
||||
if (currentPosition == FrontViewPositionRight && _settingsButton.target && [_settingsButton.target respondsToSelector:_settingsButton.action]) {
|
||||
[_settingsButton.target performSelector:_settingsButton.action withObject:_settingsButton];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)simulateSettingsButtonPress { //simulate pressing the setting button, called from setting view controller.
|
||||
//if([self isIPhonePortrait]) return; // disable settings view expanding in iphone portrait mode since it's buggy.
|
||||
@@ -1053,15 +1072,15 @@ static NSMutableSet* hostList;
|
||||
}
|
||||
|
||||
- (void)handleOrientationChange {
|
||||
UIDeviceOrientation targetOrientation = [[UIDevice currentDevice] orientation];
|
||||
if([self isIPhone] && UIDeviceOrientationIsPortrait(targetOrientation)) [self simulateSettingsButtonPressClose]; // on iphone, force close settings views if target orietation is portrait.
|
||||
// UIDeviceOrientation targetOrientation = [[UIDevice currentDevice] orientation];
|
||||
// if([self isIPhone] && UIDeviceOrientationIsPortrait(targetOrientation)) [self simulateSettingsButtonPressClose]; // on iphone, force close settings views if target orietation is portrait.
|
||||
double delayInSeconds = 0.7;
|
||||
// Convert the delay into a dispatch_time_t value
|
||||
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
|
||||
// Perform some task after the delay
|
||||
dispatch_after(delayTime, dispatch_get_main_queue(), ^{// Code to execute after the delay
|
||||
// [self updateResolutionAccordingly];
|
||||
[self.settingsButton setEnabled:![self isIPhonePortrait]]; //make sure settings button is disabled in iphone portrait mode.
|
||||
// [self.settingsButton setEnabled:![self isIPhonePortrait]]; //make sure settings button is disabled in iphone portrait mode.
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1075,23 +1094,21 @@ static NSMutableSet* hostList;
|
||||
}
|
||||
|
||||
- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position {
|
||||
|
||||
SettingsViewController* settingsViewController = (SettingsViewController*)[revealController rearViewController];
|
||||
|
||||
if (position == FrontViewPositionLeft) {
|
||||
self.navigationItem.leftBarButtonItems = @[_settingsButton];
|
||||
}
|
||||
else {
|
||||
self.navigationItem.leftBarButtonItems = @[];
|
||||
[settingsViewController updateTheme];
|
||||
}
|
||||
|
||||
SettingsViewController* settingsViewController = (SettingsViewController*)[revealController rearViewController];
|
||||
settingsViewController.mainFrameViewController = self;
|
||||
// enable / disable widgets acoordingly: in streamview, disable, outside of streamview, enable.
|
||||
if (@available(iOS 16.0, *)) {
|
||||
revealController.disconnectButton.hidden = !self.settingsExpandedInStreamView;
|
||||
} else {
|
||||
revealController.disconnectButton.enabled = self.settingsExpandedInStreamView;
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
if(self.settingsExpandedInStreamView) [revealController buttonsInStreaming];
|
||||
else [revealController buttonsNotInStreaming];
|
||||
|
||||
[settingsViewController.resolutionSelector setEnabled:!self.settingsExpandedInStreamView];
|
||||
settingsViewController.resolutionStack.hidden = self.settingsExpandedInStreamView;
|
||||
[settingsViewController.framerateSelector setEnabled:!self.settingsExpandedInStreamView];
|
||||
@@ -1351,19 +1368,47 @@ static NSMutableSet* hostList;
|
||||
]];
|
||||
}
|
||||
|
||||
- (void)applyNavBarAppearance API_AVAILABLE(ios(13.0)){
|
||||
self.navigationController.navigationBar.standardAppearance = navBarAppearanceStandard;
|
||||
self.navigationController.navigationBar.scrollEdgeAppearance = navBarAppearanceStandard;
|
||||
}
|
||||
|
||||
- (void)setupNavBar{
|
||||
if (@available(iOS 13.0, *)) {
|
||||
navBarAppearanceStandard = [[UINavigationBarAppearance alloc] init];
|
||||
[navBarAppearanceStandard configureWithOpaqueBackground]; // 不透明
|
||||
navBarAppearanceStandard.backgroundColor =[ThemeManager appBackgroundColor];; // 设置你需要的背景色
|
||||
navBarAppearanceStandard.shadowColor = nil; // 去掉底部分割线(可选)
|
||||
navBarAppearanceStandard.titleTextAttributes = @{
|
||||
NSForegroundColorAttributeName: [ThemeManager textColor]
|
||||
};
|
||||
navBarAppearanceStandard.shadowColor = [UIColor clearColor];
|
||||
navBarAppearanceStandard.backgroundImage = nil;
|
||||
|
||||
/*
|
||||
navBarAppearanceScroll = [[UINavigationBarAppearance alloc] init];
|
||||
[navBarAppearanceScroll configureWithTransparentBackground];
|
||||
navBarAppearanceScroll.backgroundEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleRegular];
|
||||
navBarAppearanceScroll.backgroundColor =[[ThemeManager appBackgroundColor] colorWithAlphaComponent:0.6]; // 设置你需要的背景色
|
||||
//navBarAppearanceScroll.shadowColor = nil; // 去掉底部分割线(可选)
|
||||
navBarAppearanceScroll.titleTextAttributes = @{
|
||||
NSForegroundColorAttributeName: [ThemeManager textColor]
|
||||
};
|
||||
// navBarAppearanceScroll.shadowColor = [UIColor clearColor];
|
||||
navBarAppearanceScroll.backgroundImage = nil;*/
|
||||
|
||||
//appearance.
|
||||
[self applyNavBarAppearance];
|
||||
}
|
||||
|
||||
self->addHostButton = [self createAddHostButton];
|
||||
self->helpButton = [self createHelpButton];
|
||||
self->_addHostButton = [self createAddHostButton];
|
||||
self->_helpButton = [self createHelpButton];
|
||||
//[self setupHostViewTitle];
|
||||
self.navigationItem.rightBarButtonItems = @[helpButton, addHostButton]; // 顺序:右边靠右的是第一个
|
||||
|
||||
|
||||
|
||||
self.navigationItem.rightBarButtonItems = @[_helpButton, _addHostButton]; // 顺序:右边靠右的是第一个
|
||||
|
||||
self.navigationController.navigationBar.backgroundColor = [ThemeManager appBackgroundColor];
|
||||
// self.navigationController.navigationBar
|
||||
self.navigationController.navigationBar.titleTextAttributes = @{
|
||||
NSForegroundColorAttributeName: [ThemeManager textColor]
|
||||
};
|
||||
// Set the side bar button action. When it's tapped, it'll show the sidebar.
|
||||
|
||||
[_settingsButton setTarget:self.revealViewController];
|
||||
@@ -1379,6 +1424,8 @@ static NSMutableSet* hostList;
|
||||
}
|
||||
|
||||
// Set the host name button action. When it's tapped, it'll show the host selection view.
|
||||
_upButton = [[UIBarButtonItem alloc] init];
|
||||
[self->_upButton setTitle: [LocalizationHelper localizedStringForKey: @"Select New Host"]];
|
||||
[_upButton setTarget:self];
|
||||
[_upButton setAction:@selector(switchToHostView)];
|
||||
}
|
||||
@@ -1387,8 +1434,12 @@ static NSMutableSet* hostList;
|
||||
[ThemeManager setUserInterfaceStyle:UIUserInterfaceStyleUnspecified];
|
||||
[super viewDidLoad];
|
||||
//[OrientationHelper updateOrientationToLandscape];
|
||||
|
||||
|
||||
// self.navigationController.delegate = self;
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(deviceOrientationDidChange) // handle orientation change since i made portrait mode available
|
||||
name:UIDeviceOrientationDidChangeNotification
|
||||
object:nil];
|
||||
|
||||
#if !TARGET_OS_TV
|
||||
self.settingsExpandedInStreamView = false; // init this flag
|
||||
self.revealViewController.isStreaming = false; //init this flag for rvlVC
|
||||
@@ -1484,7 +1535,6 @@ static NSMutableSet* hostList;
|
||||
|
||||
-(void)viewDidLayoutSubviews{
|
||||
[super viewDidLayoutSubviews];
|
||||
|
||||
[self updateHosts];
|
||||
}
|
||||
|
||||
@@ -1653,16 +1703,16 @@ static NSMutableSet* hostList;
|
||||
|
||||
[[self revealViewController] setPrimaryViewController:self];
|
||||
self.revealViewController.isStreaming = false; // tell the revealViewController streaming is finished
|
||||
[self.settingsButton setEnabled:![self isIPhonePortrait]]; //make sure settings button is disabled in iphone portrait mode.
|
||||
//[self.settingsButton setEnabled:![self isIPhonePortrait]]; //make sure settings button is disabled in iphone portrait mode.
|
||||
//recordedScreenWidth = CGRectGetWidth([[UIScreen mainScreen] bounds]); // Get the screen's bounds (in points), update recorded screen width
|
||||
#endif
|
||||
|
||||
[self.navigationController setNavigationBarHidden:NO animated:YES];
|
||||
[self.navigationController setNavigationBarHidden:NO animated:NO];
|
||||
|
||||
// Hide 1px border line
|
||||
UIImage* fakeImage = [[UIImage alloc] init];
|
||||
[self.navigationController.navigationBar setShadowImage:fakeImage];
|
||||
[self.navigationController.navigationBar setBackgroundImage:fakeImage forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
|
||||
// [self.navigationController.navigationBar setShadowImage:fakeImage];
|
||||
// [self.navigationController.navigationBar setBackgroundImage:fakeImage forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
|
||||
|
||||
// Check for a pending shortcut action when appearing
|
||||
[self handlePendingShortcutAction];
|
||||
@@ -1707,8 +1757,9 @@ static NSMutableSet* hostList;
|
||||
// for that which would normally fire beginForegroundRefresh.
|
||||
self.view.backgroundColor = [ThemeManager appBackgroundColor];
|
||||
|
||||
|
||||
[self.view addSubview:self.collectionView];
|
||||
[self initHostCollection];
|
||||
[self switchToHostView];
|
||||
|
||||
[self retrieveSavedHosts];
|
||||
|
||||
@@ -1799,7 +1850,6 @@ static NSMutableSet* hostList;
|
||||
|
||||
- (void)updateHosts {
|
||||
Log(LOG_I, @"Updating hosts...");
|
||||
float prevEdge = -1;
|
||||
@synchronized (hostList) {
|
||||
// Sort the host list in alphabetical order
|
||||
NSArray* sortedHostList = [[hostList allObjects] sortedArrayUsingSelector:@selector(compareName:)];
|
||||
@@ -1844,6 +1894,18 @@ static NSMutableSet* hostList;
|
||||
|
||||
// This function forces immediate decoding of the UIImage, rather
|
||||
// than the default lazy decoding that results in janky scrolling.
|
||||
-(void)deviceOrientationDidChange{
|
||||
if(self.collectionView.superview == nil) return;
|
||||
[NSLayoutConstraint activateConstraints:@[
|
||||
[self.collectionView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor],
|
||||
[self.collectionView.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor],
|
||||
[self.collectionView.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor],
|
||||
[self.collectionView.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor],
|
||||
//[self.collectionView.heightAnchor constraintEqualToConstant:_headerViewHeight]
|
||||
]];
|
||||
}
|
||||
|
||||
|
||||
+ (UIImage*) loadBoxArtForCaching:(TemporaryApp*)app {
|
||||
UIImage* boxArt;
|
||||
|
||||
@@ -1925,7 +1987,7 @@ static NSMutableSet* hostList;
|
||||
|
||||
[cell.subviews.firstObject removeFromSuperview]; // Remove a view that was previously added
|
||||
[cell addSubview:appView];
|
||||
[self.settingsButton setEnabled:![self isIPhonePortrait]]; // update settings button after host is clicked & appview loaded
|
||||
// [self.settingsButton setEnabled:![self isIPhonePortrait]]; // update settings button after host is clicked & appview loaded
|
||||
// Shadow opacity is controlled inside UIAppView based on whether the app
|
||||
// is hidden or not during the update cycle.
|
||||
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:cell.bounds];
|
||||
@@ -2008,7 +2070,8 @@ static NSMutableSet* hostList;
|
||||
|
||||
- (CGSize)getHostCardSize{
|
||||
CGSize cardSize;
|
||||
cardSize.height = 0.25*MIN(CGRectGetHeight([[UIScreen mainScreen] bounds]),CGRectGetWidth([[UIScreen mainScreen] bounds]));
|
||||
if([self isIPhone]) cardSize.height = 0.4*MIN(CGRectGetHeight([[UIScreen mainScreen] bounds]),CGRectGetWidth([[UIScreen mainScreen] bounds]));
|
||||
else cardSize.height = 0.25*MIN(CGRectGetHeight([[UIScreen mainScreen] bounds]),CGRectGetWidth([[UIScreen mainScreen] bounds]));
|
||||
TemporaryHost* dummyHost = [[TemporaryHost alloc] init];
|
||||
HostCardView* dummyCard = [[HostCardView alloc] initWithHost:dummyHost];
|
||||
cardSize.width = cardSize.height * (dummyCard.size.width/dummyCard.size.height);
|
||||
@@ -2027,12 +2090,12 @@ static NSMutableSet* hostList;
|
||||
[self.view addSubview:self.hostCollectionVC.view];
|
||||
|
||||
// 设置其布局(Auto Layout 示例)
|
||||
CGFloat hostCollectionViewPadding = 75;
|
||||
// CGFloat hostCollectionViewPadding = 75;
|
||||
self.hostCollectionVC.view.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
[NSLayoutConstraint activateConstraints:@[
|
||||
[self.hostCollectionVC.view.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor constant:0],
|
||||
[self.hostCollectionVC.view.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor constant:hostCollectionViewPadding],
|
||||
[self.hostCollectionVC.view.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor constant:-hostCollectionViewPadding],
|
||||
[self.hostCollectionVC.view.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor constant:0],
|
||||
[self.hostCollectionVC.view.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor constant:0],
|
||||
// [self.hostCollectionVC.view.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor constant:0] //?
|
||||
]];
|
||||
|
||||
@@ -2041,5 +2104,4 @@ static NSMutableSet* hostList;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@@ -241,7 +241,8 @@ typedef NS_ENUM(NSInteger, SWRevealToggleAnimationType)
|
||||
/* The following properties are provided for further customization, they are set to default values on initialization,
|
||||
you do not generally have to set them */
|
||||
|
||||
@property (strong, nonatomic) UIBarButtonItem *disconnectButton;
|
||||
@property (nonatomic, strong) UIBarButtonItem* disconnectButton;
|
||||
@property (nonatomic, strong) UIBarButtonItem* moreButton;
|
||||
|
||||
// Defines how much of the rear or right view is shown, default is 260.
|
||||
// Negative values indicate that the reveal width should be computed by substracting the full front view width,
|
||||
@@ -321,6 +322,10 @@ typedef NS_ENUM(NSInteger, SWRevealToggleAnimationType)
|
||||
@property (nonatomic,assign) bool isStreaming;
|
||||
@property (nonatomic,assign) bool mainFrameIsInHostView;
|
||||
|
||||
- (void)buttonsInStreaming;
|
||||
- (void)buttonsNotInStreaming;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#import "SWRevealViewController.h"
|
||||
#import "LocalizationHelper.h"
|
||||
#import "DataManager.h"
|
||||
#import "ThemeManager.h"
|
||||
|
||||
|
||||
#pragma mark - StatusBar Helper Function
|
||||
@@ -76,10 +77,12 @@ static CGFloat statusBarAdjustment( UIView* view )
|
||||
|
||||
|
||||
@implementation SWRevealView{
|
||||
|
||||
UIView *_safeAreaPadding;
|
||||
UIView* _separatorLine;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static CGFloat scaledValue( CGFloat v1, CGFloat min2, CGFloat max2, CGFloat min1, CGFloat max1)
|
||||
{
|
||||
CGFloat result = min2 + (v1-min1)*((max2-min2)/(max1-min1));
|
||||
@@ -107,6 +110,7 @@ static CGFloat scaledValue( CGFloat v1, CGFloat min2, CGFloat max2, CGFloat min1
|
||||
[self setupRearNavView];
|
||||
}
|
||||
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -138,8 +142,11 @@ static CGFloat scaledValue( CGFloat v1, CGFloat min2, CGFloat max2, CGFloat min1
|
||||
- (void)setupRearNavView {
|
||||
// 初始化 rearNavView
|
||||
_rearNavView = [[UIView alloc] init];
|
||||
_safeAreaPadding = [[UIView alloc] init];
|
||||
_rearNavView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
_rearNavView.backgroundColor = [UIColor lightGrayColor]; // 设置背景色以便查看
|
||||
_safeAreaPadding.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
// _rearNavView.backgroundColor = [UIColor lightGrayColor]; // 设置背景色以便查看
|
||||
_safeAreaPadding.backgroundColor = [ThemeManager appBackgroundColor];
|
||||
|
||||
// NSLog(@"_c.rearViewRevealWidth: %f", _c.rearViewRevealWidth);
|
||||
// _rearNavView.frame = CGRectMake(0, 0, _c.rearViewRevealWidth, 100);
|
||||
@@ -148,17 +155,19 @@ static CGFloat scaledValue( CGFloat v1, CGFloat min2, CGFloat max2, CGFloat min1
|
||||
// 设置约束 - 这里只是一个示例,你可以根据需要调整
|
||||
|
||||
[self insertSubview:_rearNavView belowSubview:_frontView];
|
||||
|
||||
[self insertSubview:_safeAreaPadding belowSubview:_frontView];
|
||||
|
||||
CGFloat navBarHeight = [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone ? UINavigationBarHeightIPhone : UINavigationBarHeightIPad;
|
||||
|
||||
[NSLayoutConstraint activateConstraints:@[
|
||||
[_rearNavView.topAnchor constraintEqualToAnchor:self.topAnchor],
|
||||
[_rearNavView.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor constant:navBarHeight],
|
||||
[_rearNavView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor],
|
||||
[_rearNavView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor],
|
||||
[_rearNavView.heightAnchor constraintEqualToConstant:navBarHeight]
|
||||
// reserve height for navigation bar
|
||||
]];
|
||||
// [self setupNavigationBar];
|
||||
|
||||
}
|
||||
|
||||
- (void)prepareRearViewForPosition:(FrontViewPosition)newPosition
|
||||
@@ -250,6 +259,17 @@ static CGFloat scaledValue( CGFloat v1, CGFloat min2, CGFloat max2, CGFloat min1
|
||||
|
||||
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:shadowBounds];
|
||||
_frontView.layer.shadowPath = shadowPath.CGPath;
|
||||
|
||||
_safeAreaPadding.hidden = self.safeAreaLayoutGuide.topAnchor == 0;
|
||||
[NSLayoutConstraint activateConstraints:@[
|
||||
[_safeAreaPadding.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor constant:0],
|
||||
[_safeAreaPadding.topAnchor constraintEqualToAnchor:self.topAnchor],
|
||||
[_safeAreaPadding.leadingAnchor constraintEqualToAnchor:self.leadingAnchor],
|
||||
[_safeAreaPadding.trailingAnchor constraintEqualToAnchor:self.trailingAnchor],
|
||||
// reserve height for navigation bar
|
||||
]];
|
||||
|
||||
//NSLog(@"width %f", self.bounds.size.width
|
||||
}
|
||||
|
||||
|
||||
@@ -619,6 +639,8 @@ static CGFloat scaledValue( CGFloat v1, CGFloat min2, CGFloat max2, CGFloat min1
|
||||
@implementation SWRevealViewController
|
||||
{
|
||||
FrontViewPosition _panInitialFrontPosition;
|
||||
UINavigationItem *_navItem;
|
||||
UIView* _separatorLine;
|
||||
NSMutableArray *_animationQueue;
|
||||
BOOL _userInteractionStore;
|
||||
UIViewController *_primaryViewController;
|
||||
@@ -666,6 +688,7 @@ const int FrontViewPositionNone = 0xff;
|
||||
_rearViewPosition = FrontViewPositionLeft;
|
||||
_rightViewPosition = FrontViewPositionLeft;
|
||||
_rearViewRevealWidth = 492.0f;
|
||||
_rearViewRevealWidth = 400;
|
||||
// _rearViewRevealOverdraw = 60.0f;
|
||||
_rearViewRevealOverdraw = 0.0f;
|
||||
_rearViewRevealDisplacement = 40.0f;
|
||||
@@ -682,9 +705,11 @@ const int FrontViewPositionNone = 0xff;
|
||||
_toggleAnimationType = SWRevealToggleAnimationTypeSpring;
|
||||
_springDampingRatio = 1;
|
||||
_replaceViewAnimationDuration = 0.25;
|
||||
// _frontViewShadowRadius = 2.5f;
|
||||
_frontViewShadowRadius = 2.5f;
|
||||
_frontViewShadowOffset = CGSizeMake(0.0f, 2.5f);
|
||||
_frontViewShadowOpacity = 1.0f;
|
||||
//_frontViewShadowOffset = CGSizeMake(0.0f, 2.5f);
|
||||
_frontViewShadowOffset = CGSizeMake(0, 0);
|
||||
_frontViewShadowOpacity = 0;
|
||||
_frontViewShadowColor = [UIColor blackColor];
|
||||
_userInteractionStore = YES;
|
||||
_animationQueue = [NSMutableArray array];
|
||||
@@ -736,7 +761,6 @@ const int FrontViewPositionNone = 0xff;
|
||||
_contentView = [[SWRevealView alloc] initWithFrame:frame controller:self];
|
||||
|
||||
[self setupNavigationBar];
|
||||
|
||||
// set the content view to resize along with its superview
|
||||
[_contentView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];
|
||||
|
||||
@@ -758,6 +782,8 @@ const int FrontViewPositionNone = 0xff;
|
||||
|
||||
// now set the desired initial position
|
||||
[self _setFrontViewPosition:initialPosition withDuration:0.0];
|
||||
[self setupMenuSeparator];
|
||||
|
||||
}
|
||||
|
||||
- (bool)isIphone{
|
||||
@@ -775,9 +801,9 @@ const int FrontViewPositionNone = 0xff;
|
||||
// tested on iOS17.
|
||||
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
|
||||
// Return the supported interface orientations acoordingly
|
||||
if(self.mainFrameIsInHostView){
|
||||
if([self isIphone]) return UIInterfaceOrientationMaskLandscape; //always try to lock orientaion to landscape in mainFrameView in order to prevent bug.
|
||||
else return [self getCurrentOrientation]; //always try to lock current orientaion in mainFrameView for iPad in order to prevent bug.
|
||||
if(!_isStreaming){
|
||||
if([self isIphone]) return UIInterfaceOrientationMaskAll; //always try to lock orientaion to landscape in mainFrameView.
|
||||
else return UIInterfaceOrientationMaskAll; //always try to lock current orientaion in mainFrameView for iPad in order to prevent bug.
|
||||
}
|
||||
|
||||
//lock the orientation accordingly after streaming is started
|
||||
@@ -794,6 +820,15 @@ const int FrontViewPositionNone = 0xff;
|
||||
// [self setupNavigationBarConstraints];
|
||||
}
|
||||
|
||||
- (void)viewSafeAreaInsetsDidChange {
|
||||
[super viewSafeAreaInsetsDidChange];
|
||||
|
||||
}
|
||||
|
||||
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
|
||||
|
||||
}
|
||||
|
||||
|
||||
- (void)viewDidLoad{
|
||||
self.isStreaming = false; //init this flag
|
||||
@@ -825,46 +860,71 @@ const int FrontViewPositionNone = 0xff;
|
||||
|
||||
#pragma mark - Public methods and property accessors
|
||||
|
||||
- (void)willMoveToPosition{
|
||||
_separatorLine.hidden = _frontViewPosition == FrontViewPositionLeft;
|
||||
}
|
||||
|
||||
|
||||
- (void)setupMenuSeparator{
|
||||
// 分隔线
|
||||
_separatorLine = [[UIView alloc] init];
|
||||
_separatorLine.backgroundColor = [ThemeManager separatorColor];
|
||||
_separatorLine.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
[_contentView.frontView addSubview:_separatorLine];
|
||||
_separatorLine.hidden = YES;
|
||||
/*
|
||||
[NSLayoutConstraint activateConstraints:@[
|
||||
[_separatorLine.trailingAnchor constraintEqualToAnchor:self.centerXAnchor constant:-10],
|
||||
[_separatorLine.topAnchor constraintEqualToAnchor:self.topAnchor],
|
||||
[_separatorLine.bottomAnchor constraintEqualToAnchor:self.bottomAnchor],
|
||||
[_separatorLine.widthAnchor constraintEqualToConstant:1.0]
|
||||
]];
|
||||
*/
|
||||
[NSLayoutConstraint activateConstraints:@[
|
||||
[_separatorLine.topAnchor constraintEqualToAnchor:_contentView.topAnchor constant:0],
|
||||
|
||||
[_separatorLine.bottomAnchor constraintEqualToAnchor:_contentView.bottomAnchor constant:0],
|
||||
//[_separatorLine.leadingAnchor constraintEqualToAnchor:self.leadingAnchor constant:self.bounds.size.width-60],
|
||||
[_separatorLine.leadingAnchor constraintEqualToAnchor:_contentView.frontView.leadingAnchor constant:5],
|
||||
[_separatorLine.trailingAnchor constraintEqualToAnchor:_contentView.frontView.leadingAnchor constant:6.5],
|
||||
]];
|
||||
}
|
||||
|
||||
|
||||
- (void)setupNavigationBar {
|
||||
// 创建导航栏
|
||||
if (_dockedNavBar == nil) _dockedNavBar = [[UINavigationBar alloc] init];
|
||||
_dockedNavBar.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
_dockedNavBar.userInteractionEnabled = YES;
|
||||
|
||||
// 创建导航项
|
||||
UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:[LocalizationHelper localizedStringForKey:@"Settings"]];
|
||||
|
||||
// Back Button
|
||||
|
||||
UIButton *customBackButton = [UIButton buttonWithType:UIButtonTypeSystem];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[customBackButton setImage:[UIImage systemImageNamed:@"chevron.left"] forState:UIControlStateNormal];
|
||||
UINavigationBarAppearance *navBarAppearanceStandard = [[UINavigationBarAppearance alloc] init];
|
||||
[navBarAppearanceStandard configureWithOpaqueBackground]; // 不透明
|
||||
navBarAppearanceStandard.backgroundColor =[ThemeManager appBackgroundColor];; // 设置你需要的背景色
|
||||
navBarAppearanceStandard.shadowColor = nil; // 去掉底部分割线(可选)
|
||||
navBarAppearanceStandard.titleTextAttributes = @{
|
||||
NSForegroundColorAttributeName: [ThemeManager textColor]
|
||||
};
|
||||
navBarAppearanceStandard.shadowColor = [UIColor clearColor];
|
||||
navBarAppearanceStandard.backgroundImage = nil;
|
||||
_dockedNavBar.standardAppearance = navBarAppearanceStandard;
|
||||
_dockedNavBar.scrollEdgeAppearance = navBarAppearanceStandard;
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
_dockedNavBar.backgroundColor = [ThemeManager appBackgroundColor];
|
||||
}
|
||||
[customBackButton setTitle:[LocalizationHelper localizedStringForKey:@"Back"] forState:UIControlStateNormal];
|
||||
customBackButton.titleLabel.font = [UIFont systemFontOfSize:19 weight:UIFontWeightRegular];
|
||||
[customBackButton addTarget:self action:@selector(foldRearView) forControlEvents:UIControlEventTouchUpInside];
|
||||
//customBackButton.contentEdgeInsets = UIEdgeInsetsMake(8, 8, 8, 8); // 增加点击区域
|
||||
// customBackButton.titleEdgeInsets = UIEdgeInsetsMake(0, 5, 0, -5);
|
||||
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:customBackButton];
|
||||
|
||||
/*
|
||||
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:[LocalizationHelper localizedStringForKey:@"Back"]
|
||||
style:UIBarButtonItemStylePlain
|
||||
target:self
|
||||
action:@selector(foldRearView)];
|
||||
*/
|
||||
|
||||
|
||||
navItem.leftBarButtonItem = backButtonItem;
|
||||
// 创建导航项
|
||||
_navItem = [[UINavigationItem alloc] initWithTitle:[LocalizationHelper localizedStringForKey:@"Settings"]];
|
||||
|
||||
_disconnectButton = [[UIBarButtonItem alloc] initWithTitle:[LocalizationHelper localizedStringForKey:@"Disconnect"]
|
||||
style:UIBarButtonItemStylePlain
|
||||
target:self
|
||||
action:@selector(disconnectRemoteSession)];
|
||||
navItem.rightBarButtonItem = _disconnectButton;
|
||||
|
||||
[_dockedNavBar setItems:@[navItem]];
|
||||
[self setupBackButton];
|
||||
[self setupDisconnectButton];
|
||||
[self setupMoreButton];
|
||||
|
||||
// navItem.rightBarButtonItem = _disconnectButton;
|
||||
|
||||
[_dockedNavBar setItems:@[_navItem]];
|
||||
_dockedNavBar.barTintColor = [UIColor darkGrayColor];
|
||||
_dockedNavBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
|
||||
|
||||
@@ -877,9 +937,132 @@ const int FrontViewPositionNone = 0xff;
|
||||
[_dockedNavBar.leadingAnchor constraintEqualToAnchor:_contentView.rearNavView.leadingAnchor],
|
||||
[_dockedNavBar.widthAnchor constraintEqualToConstant:_rearViewRevealWidth],
|
||||
]];
|
||||
NSLog(@"rearViewRevealWidth %f", _rearViewRevealWidth);
|
||||
|
||||
}
|
||||
|
||||
|
||||
- (void)setupBackButton{
|
||||
// Back Button
|
||||
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];
|
||||
[backButton setTarget:self];
|
||||
[backButton setAction:@selector(foldRearView)];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[backButton setTitle:nil];
|
||||
UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration configurationWithPointSize:23 weight:UIImageSymbolWeightMedium ];
|
||||
UIImage *image = [[UIImage systemImageNamed:@"sidebar.left" withConfiguration:config] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
|
||||
[backButton setImage:image];
|
||||
backButton.imageInsets = UIEdgeInsetsMake(20, 10, 0, 0);
|
||||
} else {
|
||||
[backButton setTitle:[LocalizationHelper localizedStringForKey:@"Back"]];
|
||||
}
|
||||
_navItem.leftBarButtonItem = backButton;
|
||||
}
|
||||
|
||||
- (void)setupDisconnectButton{
|
||||
// disconnect button
|
||||
|
||||
_disconnectButton = [[UIBarButtonItem alloc] init];
|
||||
[_disconnectButton setTarget:self];
|
||||
[_disconnectButton setAction:@selector(disconnectRemoteSession)];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[_disconnectButton setTitle:nil];
|
||||
UIImage *image = [[UIImage imageNamed:@"disconnect.svg" ] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
||||
|
||||
[_disconnectButton setImage:image];
|
||||
//_disconnectButton.imageInsets = UIEdgeInsetsMake(5, 5, 5, 5);
|
||||
_disconnectButton.tintColor = [ThemeManager appPrimaryColor];
|
||||
} else {
|
||||
[_disconnectButton setTitle:[LocalizationHelper localizedStringForKey:@"Disconnect"]];
|
||||
}
|
||||
|
||||
/*
|
||||
_disconnectButton = [[UIBarButtonItem alloc] initWithTitle:[LocalizationHelper localizedStringForKey:@"Disconnect"]
|
||||
style:UIBarButtonItemStylePlain
|
||||
target:self
|
||||
action:@selector(disconnectRemoteSession)];
|
||||
*/
|
||||
}
|
||||
|
||||
- (void)setupMoreButton{
|
||||
_moreButton = [[UIBarButtonItem alloc] init];
|
||||
|
||||
//[moreButton setAction:@selector(moreButtonTapped:)];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[_moreButton setTitle:nil];
|
||||
UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration configurationWithPointSize:23 weight:UIImageSymbolWeightMedium ];
|
||||
UIImage *image = [[UIImage systemImageNamed:@"ellipsis.circle" withConfiguration:config] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
|
||||
[_moreButton setImage:image];
|
||||
_moreButton.imageInsets = UIEdgeInsetsMake(20, 0, 0, -10);
|
||||
} else {
|
||||
[_moreButton setTitle:[LocalizationHelper localizedStringForKey:@"More"]];
|
||||
}
|
||||
|
||||
if (@available(iOS 14.0, *)) {
|
||||
UIAction *action1 = [UIAction actionWithTitle:@"操作1" image:[UIImage systemImageNamed:@"doc"] identifier:nil handler:^(__kindof UIAction * _Nonnull action) {
|
||||
NSLog(@"执行操作1");
|
||||
}];
|
||||
|
||||
UIAction *action2 = [UIAction actionWithTitle:@"操作2" image:[UIImage systemImageNamed:@"folder"] identifier:nil handler:^(__kindof UIAction * _Nonnull action) {
|
||||
NSLog(@"执行操作2");
|
||||
}];
|
||||
|
||||
UIAction *deleteAction = [UIAction actionWithTitle:@"删除" image:[UIImage systemImageNamed:@"trash"] identifier:nil handler:^(__kindof UIAction * _Nonnull action) {
|
||||
NSLog(@"执行删除操作");
|
||||
}];
|
||||
deleteAction.attributes = UIMenuElementAttributesDestructive;
|
||||
// 创建菜单
|
||||
UIMenu *menu = [UIMenu menuWithTitle:@"" children:@[action1, action2, deleteAction]];
|
||||
_moreButton.menu = menu;
|
||||
}
|
||||
else{
|
||||
[_moreButton setTarget:self];
|
||||
[_moreButton setAction:@selector(moreButtonTapped:)];
|
||||
}
|
||||
// more option button
|
||||
}
|
||||
|
||||
- (void)moreButtonTapped:(UIBarButtonItem *)sender {
|
||||
UIMenuItem *item1 = [[UIMenuItem alloc] initWithTitle:@"操作1" action:@selector(action1)];
|
||||
UIMenuItem *item2 = [[UIMenuItem alloc] initWithTitle:@"操作2" action:@selector(action2)];
|
||||
|
||||
UIMenuController *menuController = [UIMenuController sharedMenuController];
|
||||
[menuController setMenuItems:@[item1, item2]];
|
||||
|
||||
UIView *targetView = [sender valueForKey:@"view"];
|
||||
[menuController setTargetRect:targetView.bounds inView:targetView];
|
||||
[menuController setMenuVisible:YES animated:YES];
|
||||
|
||||
[self becomeFirstResponder];
|
||||
}
|
||||
|
||||
- (BOOL)canBecomeFirstResponder {
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
|
||||
if (action == @selector(action1) || action == @selector(action2)) {
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void)action1 {
|
||||
NSLog(@"执行操作1");
|
||||
}
|
||||
|
||||
- (void)action2 {
|
||||
NSLog(@"执行操作2");
|
||||
}
|
||||
|
||||
- (void)buttonsInStreaming{
|
||||
_navItem.rightBarButtonItems = @[_disconnectButton];
|
||||
}
|
||||
|
||||
- (void)buttonsNotInStreaming{
|
||||
_navItem.rightBarButtonItems = @[_moreButton];
|
||||
}
|
||||
|
||||
- (void)foldRearView{
|
||||
[self revealToggleAnimated:YES];
|
||||
}
|
||||
@@ -889,6 +1072,19 @@ const int FrontViewPositionNone = 0xff;
|
||||
[self foldRearView];
|
||||
}
|
||||
|
||||
-(void)deviceOrientationDidChange{
|
||||
/*
|
||||
if(self. == nil) return;
|
||||
[NSLayoutConstraint activateConstraints:@[
|
||||
[self.collectionView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor],
|
||||
[self.collectionView.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor],
|
||||
[self.collectionView.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor],
|
||||
[self.collectionView.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor],
|
||||
//[self.collectionView.heightAnchor constraintEqualToConstant:_headerViewHeight]
|
||||
]];
|
||||
*/
|
||||
}
|
||||
|
||||
- (void)setFrontViewController:(UIViewController *)frontViewController
|
||||
{
|
||||
[self setFrontViewController:frontViewController animated:NO];
|
||||
@@ -1358,7 +1554,7 @@ const int FrontViewPositionNone = 0xff;
|
||||
- (void)_handleRevealGestureStateBeganWithRecognizer:(UIPanGestureRecognizer *)recognizer
|
||||
{
|
||||
// we know that we will not get here unless the animationQueue is empty because the recognizer
|
||||
// delegate prevents it, however we do not want any forthcoming programatic actions to disturb
|
||||
// delegate prevfents it, however we do not want any forthcoming programatic actions to disturb
|
||||
// the gesture, so we just enqueue a dummy block to ensure any programatic acctions will be
|
||||
// scheduled after the gesture is completed
|
||||
[self _enqueueBlock:^{}]; // <-- dummy block
|
||||
@@ -1697,6 +1893,7 @@ const int FrontViewPositionNone = 0xff;
|
||||
}
|
||||
|
||||
_frontViewPosition = newPosition;
|
||||
[self willMoveToPosition];
|
||||
|
||||
void (^deploymentCompletion)(void) =
|
||||
[self _deploymentForViewController:_frontViewController inView:_contentView.frontView appear:appear disappear:disappear];
|
||||
@@ -1981,6 +2178,12 @@ const int FrontViewPositionNone = 0xff;
|
||||
return (id)parent;
|
||||
}
|
||||
|
||||
- (void)buttonsInStreaming {
|
||||
}
|
||||
|
||||
- (void)buttonsNotInStreaming {
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@@ -104,9 +104,11 @@
|
||||
|
||||
#pragma clang diagnostic pop
|
||||
|
||||
- (void) saveSettings;
|
||||
+ (bool) isLandscapeNow;
|
||||
- (void)saveSettings;
|
||||
+ (bool)isLandscapeNow;
|
||||
- (void)updateResolutionTable;
|
||||
- (void) widget:(UISlider*)widget setEnabled:(bool)enabled;
|
||||
- (void)widget:(UISlider*)widget setEnabled:(bool)enabled;
|
||||
- (void)updateTheme;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#import "TemporarySettings.h"
|
||||
#import "DataManager.h"
|
||||
#import "MenuSectionView.h"
|
||||
#import "ThemeManager.h"
|
||||
|
||||
#import <UIKit/UIGestureRecognizerSubclass.h>
|
||||
#import <VideoToolbox/VideoToolbox.h>
|
||||
@@ -181,13 +182,37 @@ CGSize resolutionTable[RESOLUTION_TABLE_SIZE];
|
||||
// Add a bit of padding so the view doesn't end right at the button of the display
|
||||
self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width,
|
||||
[self isIPhone] ? highestViewY + 20 : parentStack.frame.size.height + [self getStandardNavBarHeight] + 20);
|
||||
/*
|
||||
self.scrollView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
[NSLayoutConstraint activateConstraints:@[
|
||||
// [self.scrollView.topAnchor constraintEqualToAnchor:],
|
||||
[self.scrollView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
|
||||
[self.scrollView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor],
|
||||
[self.scrollView.topAnchor constraintEqualToAnchor:self.view.topAnchor],
|
||||
[self.scrollView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor],
|
||||
]];
|
||||
|
||||
NSLog(@"settingsViewWidth: %f", self.view.bounds.size.width);
|
||||
*/
|
||||
|
||||
|
||||
|
||||
double delayInSeconds = 3;
|
||||
// Convert the delay into a dispatch_time_t value
|
||||
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
|
||||
// Perform some task after the delay
|
||||
dispatch_after(delayTime, dispatch_get_main_queue(), ^{// Code to execute after the delay
|
||||
// [self updateResolutionAccordingly];
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// Adjust the subviews for the safe area on the iPhone X.
|
||||
- (void)viewSafeAreaInsetsDidChange {
|
||||
[super viewSafeAreaInsetsDidChange];
|
||||
|
||||
if (@available(iOS 11.0, *)) {
|
||||
//if (@available(iOS 11.0, *)) {
|
||||
if (false) { // cancel this for portrait mode
|
||||
for (UIView* view in self.view.subviews) {
|
||||
// HACK: The official safe area is much too large for our purposes
|
||||
// so we'll just use the presence of any safe area to indicate we should
|
||||
@@ -276,6 +301,7 @@ BOOL isCustomResolution(CGSize res) {
|
||||
- (void)viewDidAppear:(BOOL)animated{
|
||||
[super viewDidAppear:animated];
|
||||
[self updateResolutionTable];
|
||||
//[self updateTheme];
|
||||
NSLog(@"Resolution table updated");
|
||||
}
|
||||
|
||||
@@ -346,6 +372,19 @@ BOOL isCustomResolution(CGSize res) {
|
||||
self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic;
|
||||
// 可选:确保 scrollView 开启垂直滚动
|
||||
self.scrollView.alwaysBounceVertical = YES;
|
||||
self.scrollView.showsVerticalScrollIndicator = NO;
|
||||
|
||||
/*
|
||||
self.scrollView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
[NSLayoutConstraint activateConstraints:@[
|
||||
// [self.scrollView.topAnchor constraintEqualToAnchor:],
|
||||
[self.scrollView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
|
||||
[self.scrollView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor],
|
||||
[self.scrollView.topAnchor constraintEqualToAnchor:self.view.topAnchor],
|
||||
[self.scrollView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor],
|
||||
]];
|
||||
*/
|
||||
|
||||
parentStack = [[UIStackView alloc] init];
|
||||
parentStack.axis = UILayoutConstraintAxisVertical;
|
||||
parentStack.spacing = 0;
|
||||
@@ -366,23 +405,34 @@ BOOL isCustomResolution(CGSize res) {
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[videoSection setSectionIcon:[UIImage systemImageNamed:@"airplayvideo"]];
|
||||
} else [videoSection setSectionIcon:nil];
|
||||
self.resolutionStack.accessibilityIdentifier = @"resolutionStack";
|
||||
self.fpsStack.accessibilityIdentifier = @"fpsStack";
|
||||
self.codecStack.accessibilityIdentifier = @"codecStack";
|
||||
[videoSection addSubStackView:_resolutionStack];
|
||||
[videoSection addSubStackView:_fpsStack];
|
||||
[videoSection addSubStackView:_codecStack];
|
||||
[videoSection addToParentStack:parentStack];
|
||||
[videoSection setExpanded:YES];
|
||||
//_fpsStack.userInteractionEnabled = NO;
|
||||
|
||||
MenuSectionView *gesturesSection = [[MenuSectionView alloc] init];
|
||||
gesturesSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Gestures"];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[gesturesSection setSectionIcon:[UIImage systemImageNamed:@"hand.draw"]];
|
||||
} else [gesturesSection setSectionIcon:nil];
|
||||
self.keyboardToggleFingerNumStack.accessibilityIdentifier = @"keyboardToggleFingerNumStack";
|
||||
self.slideToSettingsScreenEdgeStack.accessibilityIdentifier = @"slideToSettingsScreenEdgeStack";
|
||||
self.slideToCmdToolScreenEdgeStack.accessibilityIdentifier = @"slideToCmdToolScreenEdgeStack";
|
||||
self.slideToSettingsDistanceStack.accessibilityIdentifier = @"slideToSettingsDistanceStack";
|
||||
[gesturesSection addSubStackView:_keyboardToggleFingerNumStack];
|
||||
[gesturesSection addSubStackView:_slideToSettingsScreenEdgeStack];
|
||||
[gesturesSection addSubStackView:_slideToCmdToolScreenEdgeStack];
|
||||
[gesturesSection addSubStackView:_slideToSettingsDistanceStack];
|
||||
// [gesturesSection addSubStackView:_unlockDisplayOrientationStack];
|
||||
[gesturesSection addToParentStack:parentStack];
|
||||
[gesturesSection setExpanded:YES];
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -445,14 +495,39 @@ BOOL isCustomResolution(CGSize res) {
|
||||
[parentStackTmp removeFromSuperview];
|
||||
}
|
||||
|
||||
- (void)handleLongPress:(UILongPressGestureRecognizer *)gesture {
|
||||
if (gesture.state == UIGestureRecognizerStateBegan) {
|
||||
CGPoint point = [gesture locationInView:self.view];
|
||||
UIView *touchedView = [self.view hitTest:point withEvent:nil];
|
||||
UIStackView* capturedStack;
|
||||
if([touchedView isKindOfClass:[UIStackView class]]){
|
||||
if(touchedView.accessibilityIdentifier != nil) capturedStack = (UIStackView *)touchedView;
|
||||
}
|
||||
else if([touchedView.superview isKindOfClass:[UIStackView class]] && touchedView.superview.accessibilityIdentifier != nil) capturedStack = (UIStackView *)touchedView.superview;
|
||||
else NSLog(@"hit test: not setting stack captured");
|
||||
// NSLog(@"hit test obj: %@", touchedView);
|
||||
NSLog(@"hit test name: %@", capturedStack.accessibilityIdentifier);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
//[self updateTheme];
|
||||
|
||||
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
|
||||
[self.view addGestureRecognizer:longPress];
|
||||
|
||||
|
||||
// return;
|
||||
BOOL isIPad = ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad);
|
||||
if(isIPad) [self layoutWidgetes]; // layout for ipad tmply
|
||||
|
||||
[self initParentStack];
|
||||
[self layoutSections];
|
||||
|
||||
if(isIPad){
|
||||
//[self layoutWidgetes]; // layout for ipad tmply
|
||||
// [self.view ]
|
||||
for(UIView* view in self.view.subviews){
|
||||
[view removeFromSuperview];
|
||||
}
|
||||
[self initParentStack];
|
||||
[self layoutSections];
|
||||
}
|
||||
|
||||
|
||||
self->slideToCloseSettingsViewRecognizer = [[CustomEdgeSlideGestureRecognizer alloc] initWithTarget:self action:@selector(edgeSwiped)];
|
||||
@@ -1173,6 +1248,80 @@ BOOL isCustomResolution(CGSize res) {
|
||||
return resolutionTable[[self.resolutionSelector selectedSegmentIndex]].width;
|
||||
}
|
||||
|
||||
- (UIStackView *)findFlatStackViewFrom:(UIView *)view {
|
||||
while (view != nil) {
|
||||
if ([view isKindOfClass:[UIStackView class]]) {
|
||||
UIStackView *stack = (UIStackView *)view;
|
||||
BOOL hasNestedStack = NO;
|
||||
for (UIView *sub in stack.arrangedSubviews) {
|
||||
if ([sub isKindOfClass:[UIStackView class]]) {
|
||||
hasNestedStack = YES;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!hasNestedStack) {
|
||||
return stack;
|
||||
}
|
||||
}
|
||||
view = view.superview;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
- (void)updateThemeForLabels:(UIView *)view {
|
||||
for (UIView *subview in view.subviews) {
|
||||
if ([subview isKindOfClass:[UILabel class]]) {
|
||||
UILabel *label = (UILabel *)subview;
|
||||
if (@available(iOS 13.0, *)) {
|
||||
label.layer.filters = nil;
|
||||
label.textColor = [ThemeManager textColor];
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
}
|
||||
[self updateThemeForLabels:subview];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)updateThemeForSelectors:(UIView *)view {
|
||||
for (UIView *subview in view.subviews) {
|
||||
if ([subview isKindOfClass:[UISegmentedControl class]]) {
|
||||
UISegmentedControl *selector = (UISegmentedControl *)subview;
|
||||
if (@available(iOS 13.0, *)) {
|
||||
selector.selectedSegmentTintColor = [ThemeManager appSecondaryColor];
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
}
|
||||
[self updateThemeForSelectors:subview];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)updateThemeForSliders:(UIView *)view {
|
||||
for (UIView *subview in view.subviews) {
|
||||
if ([subview isKindOfClass:[UISlider class]]) {
|
||||
UISlider *slider = (UISlider *)subview;
|
||||
if (@available(iOS 13.0, *)) {
|
||||
} else {
|
||||
// Fallback on earlier versions
|
||||
}
|
||||
slider.tintColor = [ThemeManager appSecondaryColor];
|
||||
|
||||
}
|
||||
[self updateThemeForSliders:subview];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (void)updateTheme{
|
||||
self.view.backgroundColor = [ThemeManager appBackgroundColor];
|
||||
[self updateThemeForLabels:self.view];
|
||||
[self updateThemeForSelectors:self.view];
|
||||
[self updateThemeForSliders:self.view];
|
||||
}
|
||||
|
||||
|
||||
- (void) saveSettings {
|
||||
DataManager* dataMan = [[DataManager alloc] init];
|
||||
NSInteger framerate = [self getChosenFrameRate];
|
||||
|
||||
@@ -323,8 +323,6 @@
|
||||
|
||||
dispatch_resume(timer);
|
||||
|
||||
// 防止循环引用(虽然这里用__block已经足够)
|
||||
__weak typeof(alert) weakAlert = alert;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user