--- /dev/null
+//
+// AppDelegate.h
+// Demo
+//
+// Created by liangshi on 2026/1/20.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+
+@end
+
--- /dev/null
+//
+// AppDelegate.m
+// Demo
+//
+// Created by liangshi on 2026/1/20.
+//
+
+#import "AppDelegate.h"
+
+@interface AppDelegate ()
+
+@end
+
+@implementation AppDelegate
+
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+ // Override point for customization after application launch.
+ return YES;
+}
+
+
+#pragma mark - UISceneSession lifecycle
+
+
+- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
+ // Called when a new scene session is being created.
+ // Use this method to select a configuration to create the new scene with.
+ return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
+}
+
+
+- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {
+ // Called when the user discards a scene session.
+ // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
+ // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
+}
+
+
+@end
--- /dev/null
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "appearances" : [
+ {
+ "appearance" : "luminosity",
+ "value" : "dark"
+ }
+ ],
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "appearances" : [
+ {
+ "appearance" : "luminosity",
+ "value" : "tinted"
+ }
+ ],
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--View Controller-->
+ <scene sceneID="EHf-IW-A2E">
+ <objects>
+ <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+ <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
+ </view>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="53" y="375"/>
+ </scene>
+ </scenes>
+</document>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--View Controller-->
+ <scene sceneID="tne-QT-ifu">
+ <objects>
+ <viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+ <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
+ </view>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+ </objects>
+ </scene>
+ </scenes>
+</document>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>UIApplicationSceneManifest</key>
+ <dict>
+ <key>UIApplicationSupportsMultipleScenes</key>
+ <false/>
+ <key>UISceneConfigurations</key>
+ <dict>
+ <key>UIWindowSceneSessionRoleApplication</key>
+ <array>
+ <dict>
+ <key>UISceneConfigurationName</key>
+ <string>Default Configuration</string>
+ <key>UISceneDelegateClassName</key>
+ <string>SceneDelegate</string>
+ <key>UISceneStoryboardFile</key>
+ <string>Main</string>
+ </dict>
+ </array>
+ </dict>
+ </dict>
+</dict>
+</plist>
--- /dev/null
+//
+// SceneDelegate.h
+// Demo
+//
+// Created by liangshi on 2026/1/20.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface SceneDelegate : UIResponder <UIWindowSceneDelegate>
+
+@property (strong, nonatomic) UIWindow * window;
+
+@end
+
--- /dev/null
+//
+// SceneDelegate.m
+// Demo
+//
+// Created by liangshi on 2026/1/20.
+//
+
+#import "SceneDelegate.h"
+
+@interface SceneDelegate ()
+
+@end
+
+@implementation SceneDelegate
+
+
+- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
+ // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
+ // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
+ // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
+}
+
+
+- (void)sceneDidDisconnect:(UIScene *)scene {
+ // Called as the scene is being released by the system.
+ // This occurs shortly after the scene enters the background, or when its session is discarded.
+ // Release any resources associated with this scene that can be re-created the next time the scene connects.
+ // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
+}
+
+
+- (void)sceneDidBecomeActive:(UIScene *)scene {
+ // Called when the scene has moved from an inactive state to an active state.
+ // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
+}
+
+
+- (void)sceneWillResignActive:(UIScene *)scene {
+ // Called when the scene will move from an active state to an inactive state.
+ // This may occur due to temporary interruptions (ex. an incoming phone call).
+}
+
+
+- (void)sceneWillEnterForeground:(UIScene *)scene {
+ // Called as the scene transitions from the background to the foreground.
+ // Use this method to undo the changes made on entering the background.
+}
+
+
+- (void)sceneDidEnterBackground:(UIScene *)scene {
+ // Called as the scene transitions from the foreground to the background.
+ // Use this method to save data, release shared resources, and store enough scene-specific state information
+ // to restore the scene back to its current state.
+}
+
+
+@end
--- /dev/null
+//
+// ViewController.h
+// Demo
+//
+// Created by liangshi on 2026/1/20.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface ViewController : UIViewController
+
+
+@end
+
--- /dev/null
+//
+// ViewController.m
+// Demo
+//
+// Created by liangshi on 2026/1/20.
+//
+
+#import "ViewController.h"
+
+@interface ViewController ()
+
+@end
+
+@implementation ViewController
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ // Do any additional setup after loading the view.
+}
+
+
+@end
--- /dev/null
+//
+// main.m
+// Demo
+//
+// Created by liangshi on 2026/1/20.
+//
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ NSString * appDelegateClassName;
+ @autoreleasepool {
+ // Setup code that might create autoreleased objects goes here.
+ appDelegateClassName = NSStringFromClass([AppDelegate class]);
+ }
+ return UIApplicationMain(argc, argv, nil, appDelegateClassName);
+}
path = ShenYin;
sourceTree = "<group>";
};
+ 3FCCA1CF2F1F675F004C2A13 /* Demo */ = {
+ isa = PBXFileSystemSynchronizedRootGroup;
+ path = Demo;
+ sourceTree = "<group>";
+ };
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
3F887B9E2E38D8DC00C98658 /* ShenYin */,
3F8F68802EC1F25700FFC00B /* New Group */,
0D54E0F02F0A61E600A80EE7 /* DeepChordsSdk */,
+ 3FCCA1CF2F1F675F004C2A13 /* Demo */,
3F887B9D2E38D8DC00C98658 /* Products */,
34A14A83ECF09370871C891F /* Pods */,
676B86A4BA2639E8694D56B4 /* Frameworks */,
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)",
- "$(PROJECT_DIR)/ShenYin/UI/Mine/Update/SDKBleManager",
- "$(PROJECT_DIR)/ShenYin/SDKBleManager",
"$(PROJECT_DIR)/ShenYin/Ota",
- "$(PROJECT_DIR)/ShenYin/Sdk/DcSdk/opus",
"$(PROJECT_DIR)/DeepChordsSdk",
"$(PROJECT_DIR)/ShenYin/Sdk/Ota",
"$(PROJECT_DIR)/ShenYin/Sdk/JoySdk",
"$(inherited)",
"@executable_path/Frameworks",
);
- LIBRARY_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/ShenYin/Sdk/DcSdk/opus/code_opus/lib",
- );
+ LIBRARY_SEARCH_PATHS = "$(inherited)";
MARKETING_VERSION = 1.0.3;
PRODUCT_BUNDLE_IDENTIFIER = com.deepchords.app;
PRODUCT_NAME = "$(TARGET_NAME)";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)",
- "$(PROJECT_DIR)/ShenYin/UI/Mine/Update/SDKBleManager",
- "$(PROJECT_DIR)/ShenYin/SDKBleManager",
"$(PROJECT_DIR)/ShenYin/Ota",
- "$(PROJECT_DIR)/ShenYin/Sdk/DcSdk/opus",
"$(PROJECT_DIR)/DeepChordsSdk",
"$(PROJECT_DIR)/ShenYin/Sdk/Ota",
"$(PROJECT_DIR)/ShenYin/Sdk/JoySdk",
"$(inherited)",
"@executable_path/Frameworks",
);
- LIBRARY_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/ShenYin/Sdk/DcSdk/opus/code_opus/lib",
- );
+ LIBRARY_SEARCH_PATHS = "$(inherited)";
MARKETING_VERSION = 1.0.3;
PRODUCT_BUNDLE_IDENTIFIER = com.deepchords.app;
PRODUCT_NAME = "$(TARGET_NAME)";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)",
- "$(PROJECT_DIR)/ShenYin/UI/Mine/Update/SDKBleManager",
- "$(PROJECT_DIR)/ShenYin/SDKBleManager",
"$(PROJECT_DIR)/ShenYin/Ota",
- "$(PROJECT_DIR)/ShenYin/Sdk/DcSdk/opus",
"$(PROJECT_DIR)/DeepChordsSdk",
"$(PROJECT_DIR)/ShenYin/Sdk/Ota",
"$(PROJECT_DIR)/ShenYin/Sdk/JoySdk",
"$(inherited)",
"@executable_path/Frameworks",
);
- LIBRARY_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/ShenYin/Sdk/DcSdk/opus/code_opus/lib",
- );
+ LIBRARY_SEARCH_PATHS = "$(inherited)";
MARKETING_VERSION = 1.0.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ios.playboy;
PRODUCT_NAME = "$(TARGET_NAME)";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)",
- "$(PROJECT_DIR)/ShenYin/UI/Mine/Update/SDKBleManager",
- "$(PROJECT_DIR)/ShenYin/SDKBleManager",
"$(PROJECT_DIR)/ShenYin/Ota",
- "$(PROJECT_DIR)/ShenYin/Sdk/DcSdk/opus",
- "$(PROJECT_DIR)/DeepChordsSdk",
"$(PROJECT_DIR)/ShenYin/Sdk/Ota",
"$(PROJECT_DIR)/ShenYin/Sdk/JoySdk",
"$(PROJECT_DIR)/ShenYin/Sdk/JoySdk/tool",
"$(inherited)",
"@executable_path/Frameworks",
);
- LIBRARY_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/ShenYin/Sdk/DcSdk/opus/code_opus/lib",
- );
+ LIBRARY_SEARCH_PATHS = "$(inherited)";
MARKETING_VERSION = 1.0.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ios.playboy;
PRODUCT_NAME = "$(TARGET_NAME)";
bgView.do { v in
v.backgroundColor = CCDevice.isJoy ? UIColor.white:UIColor.rgb(0x242424)
- v.yc.setCornerRadius(12)
+ v.yc.setCornerRadius(12.fitR)
}
sliderBgView.do { v in
// v.backgroundColor = .yellow
override func setupLayout() {
bgView.snp.makeConstraints { make in
- make.width.equalTo(kScreenWid - 36)
- make.height.equalTo(330)
+ make.width.equalTo(kScreenWid - 36.fitR)
+ make.height.equalTo(330.fitR)
make.centerX.equalToSuperview()
- make.top.equalToSuperview().inset(kNavBtm + 30)
+ make.top.equalToSuperview().inset(kNavBtm + 30.fitR)
}
resetBtn.snp.makeConstraints { make in
make.top.equalToSuperview()
make.right.equalToSuperview()
- make.size.equalTo(40)
+ make.size.equalTo(40.fitR)
}
titleLabel.snp.makeConstraints { make in
- make.top.equalToSuperview().inset(12)
- make.left.equalToSuperview().inset(12)
+ make.top.equalToSuperview().inset(12.fitR)
+ make.left.equalToSuperview().inset(12.fitR)
}
unitLabel.snp.makeConstraints { make in
- make.top.equalToSuperview().inset(55)
- make.left.equalToSuperview().inset(12)
+ make.top.equalToSuperview().inset(45.fitR)
+ make.left.equalToSuperview().inset(12.fitR)
}
valueLabel1.snp.makeConstraints { make in
- make.top.equalToSuperview().inset(80)
- make.left.equalToSuperview().inset(10)
+ make.top.equalToSuperview().inset(75.fitR)
+ make.left.equalToSuperview().inset(10.fitR)
}
valueLabel2.snp.makeConstraints { make in
- make.top.equalToSuperview().inset(190)
+ make.top.equalToSuperview().inset(180.fitR)
make.left.equalTo(valueLabel1)
}
valueLabel3.snp.makeConstraints { make in
- make.top.equalToSuperview().inset(Int(kScreenWid) - 36 - 45)
+ make.top.equalToSuperview().inset(kScreenWid - 36.fitR - 40.fitR)
make.left.equalTo(valueLabel1)
}
sliderBgView.snp.makeConstraints { make in
make.left.equalToSuperview().inset(0)
- make.right.equalToSuperview().inset(10)
+ make.right.equalToSuperview().inset(10.fitR)
make.top.equalToSuperview().inset(0)
make.bottom.equalToSuperview().inset(0)
}
let values = ["32","64","125","250","500","1k","2k","4k","8k","16k"]
- let start = 30
- let w = (Int(kScreenWid) - 36 - start - 10)/10
- let h = (Int(kScreenWid) - 36 - start - 10)/10
+ let start = 30.fitR
+ let w = (kScreenWid - 36.fitR - start - 10)/10
+ let h = (kScreenWid - 36.fitR - start - 10)/10
for i in 0...9 {
let slider = EqSlider()
slider.index = i
slider.snp.makeConstraints { make in
make.width.equalTo(h*10)
make.height.equalTo(h)
- make.top.equalTo(i*w + start)
+ make.top.equalTo(CGFloat(i)*w + start)
make.left.equalToSuperview()
}
}
}
override func setupLayout() {
- let h = 25
+ let h = 25.fitR
titleLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
- make.left.equalToSuperview().inset(10)
+ make.left.equalToSuperview().inset(10.fitR)
make.width.equalTo( h)
}
valueLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
- make.right.equalToSuperview().inset(10)
+ make.right.equalToSuperview().inset(10.fitR)
make.width.equalTo( h)
}
slider.snp.makeConstraints { make in
make.height.equalTo( h)
make.centerY.equalToSuperview()
- make.right.equalToSuperview().inset(40)
- make.left.equalToSuperview().inset(40)
+ make.right.equalToSuperview().inset(40.fitR)
+ make.left.equalToSuperview().inset(40.fitR)
}
}
@objc func sliderChanged(_ slider:UISlider){