Ver código fonte

接入蓝牙WiFi牙刷SDK

tags/v1.4.5_20211215
iot_user 4 anos atrás
pai
commit
018d39f0cd
29 arquivos alterados com 1848 adições e 15 exclusões
  1. 64
    4
      AILinkBleSDKDemo.xcodeproj/project.pbxproj
  2. BIN
      AILinkBleSDKDemo.xcodeproj/project.xcworkspace/xcuserdata/iot_user.xcuserdatad/UserInterfaceState.xcuserstate
  3. BIN
      AILinkBleSDKDemo/AILinkBleSDK.framework/AILinkBleSDK
  4. 3
    0
      AILinkBleSDKDemo/AILinkBleSDK.framework/Headers/ELBodyFatScaleBleHeader.h
  5. 1
    0
      AILinkBleSDKDemo/AILinkBleSDK.framework/Headers/ELBodyFatScaleBleManager.h
  6. 145
    0
      AILinkBleSDKDemo/AILinkBleSDK.framework/Headers/ELToothbrushBleManager.h
  7. 113
    0
      AILinkBleSDKDemo/AILinkBleSDK.framework/Headers/ELToothburshHeader.h
  8. BIN
      AILinkBleSDKDemo/AILinkBleSDK.framework/_CodeSignature/CodeDirectory
  9. BIN
      AILinkBleSDKDemo/AILinkBleSDK.framework/_CodeSignature/CodeRequirements-1
  10. 36
    6
      AILinkBleSDKDemo/AILinkBleSDK.framework/_CodeSignature/CodeResources
  11. BIN
      AILinkBleSDKDemo/AILinkBleSDK.framework/_CodeSignature/CodeSignature
  12. 4
    4
      AILinkBleSDKDemo/Info.plist
  13. 6
    1
      AILinkBleSDKDemo/ViewController.m
  14. 29
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/CABasicAnimation+ELAnimation.h
  15. 75
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/CABasicAnimation+ELAnimation.m
  16. 36
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/ELInputAlertView.h
  17. 215
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/ELInputAlertView.m
  18. 29
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/ELSelectView.h
  19. 180
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/ELSelectView.m
  20. 17
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/ToothbrushConnectionViewController.h
  21. 550
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/ToothbrushConnectionViewController.m
  22. 17
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/ToothbrushScanViewController.h
  23. 89
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/ToothbrushScanViewController.m
  24. 19
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/UIButton+WZAdd.h
  25. 65
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/UIButton+WZAdd.m
  26. 15
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/UILabel+WZAdd.h
  27. 37
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/UILabel+WZAdd.m
  28. 32
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/UIView+Category.h
  29. 71
    0
      AILinkBleSDKDemo/蓝牙WiFi牙刷/UIView+Category.m

+ 64
- 4
AILinkBleSDKDemo.xcodeproj/project.pbxproj Ver arquivo

@@ -49,10 +49,18 @@
E622E2FF243F1D4A003C319D /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E622E2D8243F1D4A003C319D /* ViewController.m */; };
E622E300243F1D4A003C319D /* ThermometerScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E622E2DA243F1D4A003C319D /* ThermometerScanViewController.m */; };
E622E301243F1D4A003C319D /* ThermometerConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E622E2DD243F1D4A003C319D /* ThermometerConnectViewController.m */; };
E680BF1C2510572A005AD827 /* AILinkBleSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E680BF1B25105729005AD827 /* AILinkBleSDK.framework */; };
E680BF252510576D005AD827 /* BroadcastScaleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E680BF1E2510576D005AD827 /* BroadcastScaleViewController.m */; };
E680BF262510576D005AD827 /* EightScaleScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E680BF212510576D005AD827 /* EightScaleScanViewController.m */; };
E680BF272510576D005AD827 /* EightScaleConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E680BF222510576D005AD827 /* EightScaleConnectionViewController.m */; };
E6FEA2102522E3BA001343A0 /* AILinkBleSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6FEA20F2522E3BA001343A0 /* AILinkBleSDK.framework */; };
E6FEA2222522E3D0001343A0 /* ELInputAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = E6FEA2132522E3D0001343A0 /* ELInputAlertView.m */; };
E6FEA2232522E3D0001343A0 /* ToothbrushScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E6FEA2142522E3D0001343A0 /* ToothbrushScanViewController.m */; };
E6FEA2242522E3D0001343A0 /* UILabel+WZAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = E6FEA2152522E3D0001343A0 /* UILabel+WZAdd.m */; };
E6FEA2252522E3D0001343A0 /* UIView+Category.m in Sources */ = {isa = PBXBuildFile; fileRef = E6FEA2172522E3D0001343A0 /* UIView+Category.m */; };
E6FEA2262522E3D0001343A0 /* UIButton+WZAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = E6FEA21A2522E3D0001343A0 /* UIButton+WZAdd.m */; };
E6FEA2272522E3D0001343A0 /* ToothbrushConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E6FEA21F2522E3D0001343A0 /* ToothbrushConnectionViewController.m */; };
E6FEA2282522E3D0001343A0 /* CABasicAnimation+ELAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = E6FEA2202522E3D0001343A0 /* CABasicAnimation+ELAnimation.m */; };
E6FEA2292522E3D0001343A0 /* ELSelectView.m in Sources */ = {isa = PBXBuildFile; fileRef = E6FEA2212522E3D0001343A0 /* ELSelectView.m */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
@@ -152,13 +160,29 @@
E622E2DB243F1D4A003C319D /* ThermometerConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThermometerConnectViewController.h; sourceTree = "<group>"; };
E622E2DC243F1D4A003C319D /* ThermometerScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThermometerScanViewController.h; sourceTree = "<group>"; };
E622E2DD243F1D4A003C319D /* ThermometerConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThermometerConnectViewController.m; sourceTree = "<group>"; };
E680BF1B25105729005AD827 /* AILinkBleSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AILinkBleSDK.framework; sourceTree = "<group>"; };
E680BF1E2510576D005AD827 /* BroadcastScaleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BroadcastScaleViewController.m; sourceTree = "<group>"; };
E680BF1F2510576D005AD827 /* BroadcastScaleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BroadcastScaleViewController.h; sourceTree = "<group>"; };
E680BF212510576D005AD827 /* EightScaleScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EightScaleScanViewController.m; sourceTree = "<group>"; };
E680BF222510576D005AD827 /* EightScaleConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EightScaleConnectionViewController.m; sourceTree = "<group>"; };
E680BF232510576D005AD827 /* EightScaleScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EightScaleScanViewController.h; sourceTree = "<group>"; };
E680BF242510576D005AD827 /* EightScaleConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EightScaleConnectionViewController.h; sourceTree = "<group>"; };
E6FEA20F2522E3BA001343A0 /* AILinkBleSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AILinkBleSDK.framework; sourceTree = "<group>"; };
E6FEA2122522E3D0001343A0 /* UIButton+WZAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+WZAdd.h"; sourceTree = "<group>"; };
E6FEA2132522E3D0001343A0 /* ELInputAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELInputAlertView.m; sourceTree = "<group>"; };
E6FEA2142522E3D0001343A0 /* ToothbrushScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToothbrushScanViewController.m; sourceTree = "<group>"; };
E6FEA2152522E3D0001343A0 /* UILabel+WZAdd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UILabel+WZAdd.m"; sourceTree = "<group>"; };
E6FEA2162522E3D0001343A0 /* ToothbrushConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToothbrushConnectionViewController.h; sourceTree = "<group>"; };
E6FEA2172522E3D0001343A0 /* UIView+Category.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Category.m"; sourceTree = "<group>"; };
E6FEA2182522E3D0001343A0 /* ELSelectView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELSelectView.h; sourceTree = "<group>"; };
E6FEA2192522E3D0001343A0 /* CABasicAnimation+ELAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CABasicAnimation+ELAnimation.h"; sourceTree = "<group>"; };
E6FEA21A2522E3D0001343A0 /* UIButton+WZAdd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+WZAdd.m"; sourceTree = "<group>"; };
E6FEA21B2522E3D0001343A0 /* UILabel+WZAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UILabel+WZAdd.h"; sourceTree = "<group>"; };
E6FEA21C2522E3D0001343A0 /* ToothbrushScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToothbrushScanViewController.h; sourceTree = "<group>"; };
E6FEA21D2522E3D0001343A0 /* ELInputAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELInputAlertView.h; sourceTree = "<group>"; };
E6FEA21E2522E3D0001343A0 /* UIView+Category.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Category.h"; sourceTree = "<group>"; };
E6FEA21F2522E3D0001343A0 /* ToothbrushConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToothbrushConnectionViewController.m; sourceTree = "<group>"; };
E6FEA2202522E3D0001343A0 /* CABasicAnimation+ELAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CABasicAnimation+ELAnimation.m"; sourceTree = "<group>"; };
E6FEA2212522E3D0001343A0 /* ELSelectView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELSelectView.m; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
@@ -166,7 +190,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
E680BF1C2510572A005AD827 /* AILinkBleSDK.framework in Frameworks */,
E6FEA2102522E3BA001343A0 /* AILinkBleSDK.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -201,7 +225,8 @@
E622E25D243F1CA5003C319D /* AILinkBleSDKDemo */ = {
isa = PBXGroup;
children = (
E680BF1B25105729005AD827 /* AILinkBleSDK.framework */,
E6FEA2112522E3D0001343A0 /* 蓝牙WiFi牙刷 */,
E6FEA20F2522E3BA001343A0 /* AILinkBleSDK.framework */,
E622E2B7243F1D4A003C319D /* AiLinkSuper */,
E622E2CC243F1D4A003C319D /* BabyScale */,
E622E2B1243F1D4A003C319D /* BloodPressure */,
@@ -415,6 +440,29 @@
path = "八电极体脂秤";
sourceTree = "<group>";
};
E6FEA2112522E3D0001343A0 /* 蓝牙WiFi牙刷 */ = {
isa = PBXGroup;
children = (
E6FEA2122522E3D0001343A0 /* UIButton+WZAdd.h */,
E6FEA2132522E3D0001343A0 /* ELInputAlertView.m */,
E6FEA2142522E3D0001343A0 /* ToothbrushScanViewController.m */,
E6FEA2152522E3D0001343A0 /* UILabel+WZAdd.m */,
E6FEA2162522E3D0001343A0 /* ToothbrushConnectionViewController.h */,
E6FEA2172522E3D0001343A0 /* UIView+Category.m */,
E6FEA2182522E3D0001343A0 /* ELSelectView.h */,
E6FEA2192522E3D0001343A0 /* CABasicAnimation+ELAnimation.h */,
E6FEA21A2522E3D0001343A0 /* UIButton+WZAdd.m */,
E6FEA21B2522E3D0001343A0 /* UILabel+WZAdd.h */,
E6FEA21C2522E3D0001343A0 /* ToothbrushScanViewController.h */,
E6FEA21D2522E3D0001343A0 /* ELInputAlertView.h */,
E6FEA21E2522E3D0001343A0 /* UIView+Category.h */,
E6FEA21F2522E3D0001343A0 /* ToothbrushConnectionViewController.m */,
E6FEA2202522E3D0001343A0 /* CABasicAnimation+ELAnimation.m */,
E6FEA2212522E3D0001343A0 /* ELSelectView.m */,
);
path = "蓝牙WiFi牙刷";
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
@@ -519,6 +567,7 @@
files = (
E680BF262510576D005AD827 /* EightScaleScanViewController.m in Sources */,
E622E2FF243F1D4A003C319D /* ViewController.m in Sources */,
E6FEA2292522E3D0001343A0 /* ELSelectView.m in Sources */,
E622E2EF243F1D4A003C319D /* BloodConnectViewController.m in Sources */,
E622E2F6243F1D4A003C319D /* WheelMonitorConnectViewController.m in Sources */,
E622E2EB243F1D4A003C319D /* MASConstraint.m in Sources */,
@@ -526,24 +575,31 @@
E622E2FA243F1D4A003C319D /* BabyScaleViewController.m in Sources */,
E622E301243F1D4A003C319D /* ThermometerConnectViewController.m in Sources */,
E622E2F8243F1D4A003C319D /* RemoteControlConnectViewController.m in Sources */,
E6FEA2222522E3D0001343A0 /* ELInputAlertView.m in Sources */,
E622E2FE243F1D4A003C319D /* BodyFatScaleConnectViewController.m in Sources */,
E622E2DF243F1D4A003C319D /* HeightGuageConnectViewController.m in Sources */,
E622E2DE243F1D4A003C319D /* HeightGuageScanViewController.m in Sources */,
E622E2FC243F1D4A003C319D /* BodyFatScaleScanViewController.m in Sources */,
E680BF272510576D005AD827 /* EightScaleConnectionViewController.m in Sources */,
E6FEA2282522E3D0001343A0 /* CABasicAnimation+ELAnimation.m in Sources */,
E622E2E4243F1D4A003C319D /* NSLayoutConstraint+MASDebugAdditions.m in Sources */,
E6FEA2252522E3D0001343A0 /* UIView+Category.m in Sources */,
E622E2ED243F1D4A003C319D /* MASViewAttribute.m in Sources */,
E622E2E1243F1D4A003C319D /* InheritConnectViewController.m in Sources */,
E622E2F4243F1D4A003C319D /* ForeheadConnectViewController.m in Sources */,
E6FEA2272522E3D0001343A0 /* ToothbrushConnectionViewController.m in Sources */,
E622E2EC243F1D4A003C319D /* MASViewConstraint.m in Sources */,
E6FEA2232522E3D0001343A0 /* ToothbrushScanViewController.m in Sources */,
E622E2E0243F1D4A003C319D /* SubBleManager.m in Sources */,
E680BF252510576D005AD827 /* BroadcastScaleViewController.m in Sources */,
E622E2E7243F1D4A003C319D /* MASConstraintMaker.m in Sources */,
E622E2E8243F1D4A003C319D /* MASLayoutConstraint.m in Sources */,
E6FEA2262522E3D0001343A0 /* UIButton+WZAdd.m in Sources */,
E622E300243F1D4A003C319D /* ThermometerScanViewController.m in Sources */,
E622E2F9243F1D4A003C319D /* RemoteControlScanViewController.m in Sources */,
E622E2F3243F1D4A003C319D /* AiLinkSuperViewController.m in Sources */,
E622E2FD243F1D4A003C319D /* WiFiSetupViewController.m in Sources */,
E6FEA2242522E3D0001343A0 /* UILabel+WZAdd.m in Sources */,
E622E2FB243F1D4A003C319D /* BabyScaleConnectViewController.m in Sources */,
E622E2EA243F1D4A003C319D /* View+MASAdditions.m in Sources */,
E622E2F2243F1D4A003C319D /* AilinkSuperConnectViewController.m in Sources */,
@@ -704,6 +760,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 202009291140;
DEVELOPMENT_TEAM = YEU77XR292;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
@@ -714,6 +771,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.1;
PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo;
PRODUCT_NAME = "$(TARGET_NAME)";
TARGETED_DEVICE_FAMILY = "1,2";
@@ -725,6 +783,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 202009291140;
DEVELOPMENT_TEAM = YEU77XR292;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
@@ -735,6 +794,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.1;
PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo;
PRODUCT_NAME = "$(TARGET_NAME)";
TARGETED_DEVICE_FAMILY = "1,2";

BIN
AILinkBleSDKDemo.xcodeproj/project.xcworkspace/xcuserdata/iot_user.xcuserdatad/UserInterfaceState.xcuserstate Ver arquivo


BIN
AILinkBleSDKDemo/AILinkBleSDK.framework/AILinkBleSDK Ver arquivo


+ 3
- 0
AILinkBleSDKDemo/AILinkBleSDK.framework/Headers/ELBodyFatScaleBleHeader.h Ver arquivo

@@ -75,6 +75,9 @@ typedef NS_ENUM(NSInteger , ELBodyFatScaleBleDataType) {
/** MCU发送体脂数据给App,发送完毕(一次完整测量结束) */
ELBodyFatScaleBleDataType_MCUBackSendUnitResult = 0x82 ,
/** 数据传输结束指令 */
ELBodyFatScaleBleDataType_ReceivedDataResult = 0xFE ,
/** 设备上发错误码 */
ELBodyFatScaleBleDataType_MCUBackErrorCode = 0xFF ,
};

+ 1
- 0
AILinkBleSDKDemo/AILinkBleSDK.framework/Headers/ELBodyFatScaleBleManager.h Ver arquivo

@@ -123,6 +123,7 @@ MCU requests user information( MCU 请求用户信息)

- (void)sendCurrentUserToBle:(ELBodyFatScaleBleUserModel *)usr;

-(void)sendReceivedDataResult:(BOOL)result;

#pragma mark ============ 下发A6指令 ==============


+ 145
- 0
AILinkBleSDKDemo/AILinkBleSDK.framework/Headers/ELToothbrushBleManager.h Ver arquivo

@@ -0,0 +1,145 @@
//
// ELToothbrushBleManager.h
// Elink
//
// Created by iot_user on 2020/5/11.
// Copyright © 2020 iot_iMac. All rights reserved.
//

#import "ELBluetoothManager.h"
#import "ELToothburshHeader.h"

NS_ASSUME_NONNULL_BEGIN

@protocol ToothbrushDelegate <NSObject>

@optional
//Bluetooth status callback(回调蓝牙状态)
-(void)toothbrushReceiveState:(ELBluetoothState)state;

//Callback toothbrush device list(回调牙刷设备列表)
-(void)toothbrushReceiveDevices:(NSArray<ELPeripheralModel *> *)devices;

/// Callback gear information(回调档位信息)
/// @param oneGear First gear(一档档位)
/// @param twoGear Second gear(二档档位)
-(void)toothbrushReceiveOneGear:(NSArray<NSNumber *> *)oneGear twoGear:(NSArray<NSNumber *> *)twoGear;

/// Set work gear result(设置工作档位结果)
/// @param result 结果
-(void)toothbrushReceiveSetWorkGearResult:(ELSetBluetoothResponseType)result;

//Call back current working gear information(回调当前工作档位信息)
-(void)toothbrushReceiveWorkGear:(ToothbrushWorkGear)workGear;

/// Call back trial results(回调试用结果)
/// @param result 结果
-(void)toothbrushReceiveTryResult:(ToothbrushSetResult)result;

/// Report work phase(上报工作阶段)
/// @param workPhase Work stage information(工作阶段信息)
-(void)toothbrushReceiveWorkPhase:(ToothBrushWorkPhase)workPhase;

/// Recall the data of manually set gear(回调手动设置档位的数据)
/// @param custom data(数据)
-(void)toothbrushReceiveCustomData:(ToothbrushCustomData)custom;

/// Callback switch toothbrush result(回调开关牙刷结果)
/// @param result 结果
-(void)toothbrushReceiveSwitchResult:(ToothbrushSetResult)result;


/// Callback three-axis direction(回调三轴方向)
/// @param direction 方向
-(void)toothbrushReceiveTriaxialDirection:(ToothbrushTriaxialDirection)direction;

/// Recall three-axis data(回调三轴数据)
/// @param success 是否成功
/// @param x x轴数据
/// @param y y轴数据
/// @param z z轴数据
-(void)toothbrushReceiveTriaxialData:(BOOL)success triaxialX:(int)x triaxialY:(int)y triaxialZ:(int)z;

/// Default value of second gear(二档档位默认值)
/// @param gear Second gear(二档档位)
-(void)toothbrushReceiveTwoGearDefault:(ToothbrushGearType)gear;

/// Set the second gear default gear result(设置二档默认档位结果)
/// @param result 结果
-(void)toothbrushReceiveSettingTwoGearDefaultResult:(ELSetBluetoothResponseType)result;

/// Call back brushing data(回调刷牙数据)
/// @param data 刷牙数据
-(void)toothbrushtReceiveToothbrushData:(ToothbrushData)data;

@end


@interface ELToothbrushBleManager : ELBluetoothManager
//Current working mode(当前工作模式)
@property (nonatomic, assign) ToothbrushGearType currentMode;
//Current default working hours(当前默认工作时长)
@property (nonatomic, assign) NSInteger currentWorkTime;
//Current gear(当前档位)
@property (nonatomic, assign) ToothSupportGearType currentGear;


@property (nonatomic, weak) id<ToothbrushDelegate> toothbrushDelegate;


+(instancetype)shareManager;



//Get supported gear(获取支持的档位)
-(void)getGear;

/// Set brushing mode(设置刷牙模式)
/// @param gearType Brushing mode(刷牙模式)
/// @param interval Brushing time (0: do not modify the working time, before keeping)(刷牙时间(0:不修改工作时长,保留之前))
/// @param supportType Which gear is it(是哪个档位)
-(void)setWorkGear:(ToothbrushGearType)gearType interval:(int)interval supportGearType:(ToothSupportGearType)supportType;

/// Get the current working gear(获取当前工作的档位)
-(void)getWorkGear;

/// try out(试用)
/// @param gear Gear (ToothbrushGearTypeStop means stop trial)(档位(ToothbrushGearTypeStop 表示停止试用))
/// @param supportType Which gear(第几档)
/// @param frequency 频率
/// @param duty 占空比
-(void)tryGear:(ToothbrushGearType)gear supportType:(ToothSupportGearType)supportType frequency:(int)frequency duty:(int)duty;

/// Get the current work stage(获取当前工作阶段)
-(void)getWorkPhase;

/// Set manual setting gear(设置手动设置档位)
/// @param frequency 频率
/// @param duty 占空比
/// @param interval 时间
-(void)setCustomGearData:(int)frequency duty:(int)duty interval:(int)interval;

/// Get manual profile data(获取手动设置档数据)
-(void)getCustomGear;

/// Switch toothbrush(开关牙刷)
-(void)switchToothbrush;

//Get three axis direction(获取三轴方向)
-(void)getTriaxialDirection;

//Get three-axis data(获取三轴数据)
-(void)getTriaxialData;

//Set the second gear default gear(设置二档默认档位)
-(void)setTwoGearDefaultGear:(ToothbrushGearType)gear;

//Get the second gear default gear(获取二档默认档位)
-(void)getTwoGearDefualt;

//Report the results of receiving brushing data(上报刷牙数据接收结果)
-(void)reportReceiveResultOfToothbrushData:(BOOL)result;

@end

NS_ASSUME_NONNULL_END

+ 113
- 0
AILinkBleSDKDemo/AILinkBleSDK.framework/Headers/ELToothburshHeader.h Ver arquivo

@@ -0,0 +1,113 @@
//
// ELToothburshHeader.h
// Elink
//
// Created by iot_user on 2020/5/11.
// Copyright © 2020 iot_iMac. All rights reserved.
//

#ifndef ELToothburshHeader_h
#define ELToothburshHeader_h

#import "ELSDKHeader.h"

typedef NS_ENUM(NSUInteger, ToothSupportGearType) {
ToothSupportGearTypeUnknown = 0x00, //Unsupported gear(不支持的档位)
ToothSupportGearTypeOneGear = 0x01, //First gear(一档)
ToothSupportGearTypeTwoGear = 0x02, //Second gear(二档)
};


//Working gear(工作档位)
typedef NS_ENUM(NSUInteger, ToothbrushGearType) {
ToothbrushGearTypeStop = 0x00, //Stop the motor(停止电机)
ToothbrushGearTypeClean = 0x01, //clean(清洁)
ToothbrushGearTypeWhite = 0x02, //Whitening(美白)
ToothbrushGearTypeMassage = 0x03, //massage(按摩)
ToothbrushGearTypeSenstitive = 0x04, //sensitive(敏感)
ToothbrushGearTypePolish = 0x05, //polishing(抛光)
ToothbrushGearTypeGumCare = 0x06, //Gum care(牙龈护理)
ToothbrushGearTypeRefresh = 0x07, //gargle(漱口)
ToothbrushGearTypeMascare = 0x08, //health care(保健)
ToothbrushGearTypeNewbie = 0x09, //Novice(新手)
ToothbrushGearTypeSoft = 0x0A, //Shurou(舒柔)
ToothbrushGearTypeGentle = 0x0B, //gentle(轻柔)
ToothbrushGearTypePamper = 0x0C, //Care(呵护)
ToothbrushGearTypeCustom = 0xFF, //manual setting(手动设置)
};

typedef NS_ENUM(NSUInteger, ToothbrushDataType) {
ToothbrushDataTypeSetGear = 0x02,//Set gear(设置档位)
ToothbrushDataTypeGetGear = 0x03,//Get the current working gear(获取当前工作的档位)
ToothbrushDataTypeTry = 0x06,//try out(试用)
ToothbrushDataTypeWorkPhase = 0x07,//Work Phase(工作阶段)
ToothbrushDataTypeSetCustomData = 0x09,//Set manual setting mode(设置手动设置模式)
ToothbrushDataTypeGetCustomGear = 0x0A,//Get manually set data(获取手动设置的数据)
ToothbrushDataTypeSwitchWork = 0x0B,//Switch toothbrush(开关牙刷)
ToothbrushDataTypeSetTwoGearDefault = 0x0C,//Set second gear default(设置二档默认)
ToothbrushDataTypeGetTwoGearDefault = 0x0D,//Get second gear default(获取二档默认)
ToothbrushDataTypeToothbrushData = 0xFD,//Brushing data(刷牙数据)
ToothbrushDataTypeReportResult = 0xFE,//Report received data result(上报接收数据结果)
};

typedef NS_ENUM(NSUInteger, ToothbrushA6DataType) {
ToothbrushA6DataTypeTriaxialDirection = 0x02, //Get the three-axis direction of the toothbrush(获取牙刷三轴方向)
ToothbrushA6DataTypeTriaxialData = 0x05, //Get toothbrush three-axis data(获取牙刷三轴数据)
};


typedef NS_ENUM(NSUInteger, ToothbrushSetResult) {
ToothbrushSetResultSuccess,//Set successfully(设置成功)
ToothbrushSetResultFail,//Setting failed for unknown reason(设置失败,原因未知)
ToothbrushSetResultUnsupport,//Does not support settings(不支持设置)
ToothbrushSetResultLowPower,//Setting failed, battery voltage is low(设置失败,电池电压不足)
ToothbrushSetResultCharging,//Setting failed, charging(设置失败,正在充电)
ToothbrushSetResultWorking,//Setting failed, working(设置失败,正在工作)
};
//Work Phase(工作阶段)
typedef NS_ENUM(NSUInteger, ToothbrushWorkPhaseType) {
ToothbrushWorkPhaseTypeLeftTop,
ToothbrushWorkPhaseTypeLeftBottom,
ToothbrushWorkPhaseTypeRightTop,
ToothbrushWorkPhaseTypeRightBottom
};

//Y axis direction(Y轴方向)
typedef NS_ENUM(NSUInteger, ToothbrushTriaxialDirection) {
ToothbrushTriaxialDirectionYTop = 1,//Y axis up(Y轴朝上)
ToothbrushTriaxialDirectionYBottom = 2,//Y axis down(Y轴朝下)
ToothbrushTriaxialDirectionYLeft = 3,//Y axis left(Y轴朝左)
ToothbrushTriaxialDirectionYRight = 4,//Y axis right(Y轴朝右)
};



typedef struct{
int interval;//operating hours(工作时间)
ToothbrushGearType gearType;//Gear(档位)
ToothSupportGearType supportType;//What Gear(什么档)
}ToothbrushWorkGear,ToothbrushWorkGear;

typedef struct{
ToothbrushGearType gear;
ToothSupportGearType supportType;//一档、二档
ToothbrushWorkPhaseType workPhase;
}ToothBrushWorkPhase,ToothBrushWorkPhase;
//
typedef struct{
int frequency;
int duty;
int interval;
}ToothbrushCustomData,ToothbrushCustomData;

//Brushing data(刷牙数据)
typedef struct{
ToothbrushGearType gear;//Working gear(工作档位)
int workTime;//work time(工作时长)
int leftTime;//Time left(左边时长)
int rightTime;//Right time(右边时长)
int battery;//battery(电量)
}ToothbrushData,ToothbrushData;

#endif /* ELToothburshHeader_h */

BIN
AILinkBleSDKDemo/AILinkBleSDK.framework/_CodeSignature/CodeDirectory Ver arquivo


BIN
AILinkBleSDKDemo/AILinkBleSDK.framework/_CodeSignature/CodeRequirements-1 Ver arquivo


+ 36
- 6
AILinkBleSDKDemo/AILinkBleSDK.framework/_CodeSignature/CodeResources Ver arquivo

@@ -50,11 +50,11 @@
</data>
<key>Headers/ELBodyFatScaleBleHeader.h</key>
<data>
0b9mGDuee7WiIQE4CW0ADfbEL1s=
d9CouBwRoqMKUrT+iiS0UztzPo4=
</data>
<key>Headers/ELBodyFatScaleBleManager.h</key>
<data>
k+OxOANxEznDe5jW76CiJ9hdU7k=
aOe/Psooxp0TUxRdLYUmY7I7VrA=
</data>
<key>Headers/ELBodyFatScaleBleUserModel.h</key>
<data>
@@ -160,6 +160,14 @@
<data>
Oa8GTYS1hEhJk+BQL1IiR2T3eSw=
</data>
<key>Headers/ELToothbrushBleManager.h</key>
<data>
TgXiM9WWYyDwMboD7z+CRuTnCbI=
</data>
<key>Headers/ELToothburshHeader.h</key>
<data>
QHN/+6s7uaNjGtbsXs91q11T2aM=
</data>
<key>Headers/ELUnitConvertTool.h</key>
<data>
KUvTJzAj6UgO0TVIag6jroPEZ9g=
@@ -312,22 +320,22 @@
<dict>
<key>hash</key>
<data>
0b9mGDuee7WiIQE4CW0ADfbEL1s=
d9CouBwRoqMKUrT+iiS0UztzPo4=
</data>
<key>hash2</key>
<data>
2py6JfIiYKS46qwDo7/27T0rqmu7YbHa+fqUBdvhth0=
pKjb8UqI7IWcu3tjnBMSvE5QrbjyydIEe/CiN7dzs+g=
</data>
</dict>
<key>Headers/ELBodyFatScaleBleManager.h</key>
<dict>
<key>hash</key>
<data>
k+OxOANxEznDe5jW76CiJ9hdU7k=
aOe/Psooxp0TUxRdLYUmY7I7VrA=
</data>
<key>hash2</key>
<data>
v1HPAh30uLZy9KqJxyWSvifOrjCBTDPNRYKsM/kDPw4=
yP0Y2J8Opesx6PnzjJRowY6jVqShxqay2AO3JlakpkY=
</data>
</dict>
<key>Headers/ELBodyFatScaleBleUserModel.h</key>
@@ -616,6 +624,28 @@
gSjca3FLXifg5U5v47xNQpOf4dgQ0ib6CwitQPp1Hbs=
</data>
</dict>
<key>Headers/ELToothbrushBleManager.h</key>
<dict>
<key>hash</key>
<data>
TgXiM9WWYyDwMboD7z+CRuTnCbI=
</data>
<key>hash2</key>
<data>
vrkXk3mi2klykCre31uYLq5HA1JeBiyWR5dguDpSOpg=
</data>
</dict>
<key>Headers/ELToothburshHeader.h</key>
<dict>
<key>hash</key>
<data>
QHN/+6s7uaNjGtbsXs91q11T2aM=
</data>
<key>hash2</key>
<data>
0ASrA6x/0Oawl6R0Sa+RejPtC7W1JoYM7YxK6cvZdDI=
</data>
</dict>
<key>Headers/ELUnitConvertTool.h</key>
<dict>
<key>hash</key>

BIN
AILinkBleSDKDemo/AILinkBleSDK.framework/_CodeSignature/CodeSignature Ver arquivo


+ 4
- 4
AILinkBleSDKDemo/Info.plist Ver arquivo

@@ -15,11 +15,13 @@
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>1</string>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSBluetoothAlwaysUsageDescription</key>
<string></string>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
@@ -60,7 +62,5 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>NSBluetoothAlwaysUsageDescription</key>
<string></string>
</dict>
</plist>

+ 6
- 1
AILinkBleSDKDemo/ViewController.m Ver arquivo

@@ -20,6 +20,7 @@
#import "BodyFatScaleScanViewController.h"
#import "BroadcastScaleViewController.h"
#import "EightScaleScanViewController.h"
#import "ToothbrushScanViewController.h"

@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>

@@ -33,7 +34,7 @@

- (void)viewDidLoad {
[super viewDidLoad];
self.datas = @[@"自己写协议走透传",@"有AILink协议自己解析数据",@"集成婴儿秤",@"集成血压计",@"集成身高仪",@"集成遥控器",@"集成额温枪",@"集成温度计",@"集成胎压监测",@"集成体脂秤",@"集成广播秤",@"八电极体脂秤"];
self.datas = @[@"自己写协议走透传",@"有AILink协议自己解析数据",@"集成婴儿秤",@"集成血压计",@"集成身高仪",@"集成遥控器",@"集成额温枪",@"集成温度计",@"集成胎压监测",@"集成体脂秤",@"集成广播秤",@"八电极体脂秤",@"蓝牙WiFi牙刷"];
[self.view addSubview:self.tableView];
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.right.bottom.mas_equalTo(0);
@@ -104,6 +105,10 @@
EightScaleScanViewController *vc = [[EightScaleScanViewController alloc] init];
vc.title = self.datas[indexPath.row];
[self.navigationController pushViewController:vc animated:YES];
}else if (indexPath.row == 12){
ToothbrushScanViewController *vc = [[ToothbrushScanViewController alloc] init];
vc.title = self.datas[indexPath.row];
[self.navigationController pushViewController:vc animated:YES];
}

}

+ 29
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/CABasicAnimation+ELAnimation.h Ver arquivo

@@ -0,0 +1,29 @@
//
// CABasicAnimation+ELAnimation.h
// Elink
//
// Created by iot_user on 2019/1/23.
// Copyright © 2019年 iot_iMac. All rights reserved.
//

#import <QuartzCore/QuartzCore.h>

#define ELAnimationDuration 0.2
NS_ASSUME_NONNULL_BEGIN

@interface CABasicAnimation (ELAnimation)
//缩放动画show
+(CABasicAnimation *)scaleShowAnimationWithDuration:(CGFloat)duration;
//缩放动画hide
+(CABasicAnimation *)scaleHideAnimationWithDuration:(CGFloat)duration;
//平移动画
+(CABasicAnimation *)positionAnimationWithBeginPoint:(CGPoint)beginPoint withEndPoint:(CGPoint)endPoint;
//旋转旋转动画
+(CABasicAnimation *)rotationAnimationWithBeginValue:(CGFloat)beginValue endValue:(CGFloat)endValue;

+(CABasicAnimation *)alphaAnimation;

+(CABasicAnimation *)heightAnimation;
@end

NS_ASSUME_NONNULL_END

+ 75
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/CABasicAnimation+ELAnimation.m Ver arquivo

@@ -0,0 +1,75 @@
//
// CABasicAnimation+ELAnimation.m
// Elink
//
// Created by iot_user on 2019/1/23.
// Copyright © 2019年 iot_iMac. All rights reserved.
//

#import "CABasicAnimation+ELAnimation.h"
#import <UIKit/UIKit.h>

@implementation CABasicAnimation (ELAnimation)
//
+(CABasicAnimation *)scaleShowAnimationWithDuration:(CGFloat)duration{
CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
animation.fromValue = [NSNumber numberWithInteger:0.0];
animation.toValue = [NSNumber numberWithInteger:1.0];
animation.duration = duration;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
return animation;
}
+(CABasicAnimation *)scaleHideAnimationWithDuration:(CGFloat)duration{
CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
animation.fromValue = [NSNumber numberWithInteger:1.0];
animation.toValue = [NSNumber numberWithInteger:0.0];
animation.duration = duration;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
return animation;
}
+(CABasicAnimation *)positionAnimationWithBeginPoint:(CGPoint)beginPoint withEndPoint:(CGPoint)endPoint{
CABasicAnimation * position =[CABasicAnimation animationWithKeyPath:@"position"];
position.fromValue = [NSValue valueWithCGPoint:beginPoint];
position.toValue = [NSValue valueWithCGPoint:endPoint];
position.duration = ELAnimationDuration;
position.removedOnCompletion = NO;
position.fillMode = kCAFillModeForwards;
position.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
return position;
}

+(CABasicAnimation *)rotationAnimationWithBeginValue:(CGFloat)beginValue endValue:(CGFloat)endValue{
CABasicAnimation *aniamtion = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
aniamtion.fromValue = [NSNumber numberWithFloat:beginValue];
aniamtion.toValue = [NSNumber numberWithFloat:endValue];
aniamtion.duration = ELAnimationDuration;
aniamtion.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
aniamtion.repeatCount = 1;
aniamtion.fillMode = kCAFillModeForwards;
aniamtion.removedOnCompletion = NO;
return aniamtion;
}
+(CABasicAnimation *)alphaAnimation{
CABasicAnimation *aniamtion = [CABasicAnimation animationWithKeyPath:@"opacity"];
aniamtion.fromValue = @1;
aniamtion.toValue = @0.3;
aniamtion.duration = ELAnimationDuration;
aniamtion.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
aniamtion.fillMode = kCAFillModeForwards;
aniamtion.repeatCount = INFINITY;
aniamtion.removedOnCompletion = YES;
return aniamtion;
}
+(CABasicAnimation *)heightAnimation{
CABasicAnimation *aniamtion = [CABasicAnimation animationWithKeyPath:@"scale.y"];
aniamtion.fromValue = @0;
aniamtion.toValue = @1;
aniamtion.duration = ELAnimationDuration;
aniamtion.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
aniamtion.fillMode = kCAFillModeForwards;
aniamtion.removedOnCompletion = NO;
return aniamtion;
}
@end

+ 36
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/ELInputAlertView.h Ver arquivo

@@ -0,0 +1,36 @@
//
// ELInputAlertView.h
// 自定义tabbar
//
// Created by iot_user on 2019/1/19.
// Copyright © 2019年 IOT. All rights reserved.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface ELInputAlertView : UIView

@property (nonatomic, strong) UIColor *topBtnBackColor;


//自动隐藏
@property (nonatomic, assign) BOOL leftAutoHide;//default:YES
@property (nonatomic, assign) BOOL rightAutoHide;//default:NO
@property (nonatomic, assign) BOOL first;//

//
@property (nonatomic, copy) void(^leftBlock)(NSString * text);
@property (nonatomic, copy) void(^rightBlock)(NSString * text);

@property (nonatomic, copy) BOOL(^leftHideBlock)(NSString * text, UIView *view);
@property (nonatomic, copy) BOOL(^rightHideBlock)(NSString * text, UIView *view);

-(instancetype)initWithTittle:(NSString *)title withText:(NSString *)text withMessage:(NSString *)placeholder withLeftButton:(NSString *)leftTitle withRightButton:(NSString *)rightTitle;

-(void)show;

@end

NS_ASSUME_NONNULL_END

+ 215
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/ELInputAlertView.m Ver arquivo

@@ -0,0 +1,215 @@
//
// ELInputAlertView.m
// 自定义tabbar
//
// Created by iot_user on 2019/1/19.
// Copyright © 2019年 IOT. All rights reserved.
//

#import "ELInputAlertView.h"
#import "CABasicAnimation+ELAnimation.h"
#import "UIView+Category.h"
#import "Masonry.h"

//字符串是否为空
//#define IsEmptyStr(str) [NSString isEmptyString:str]
//375x667的屏幕
#define ScreenHeight [UIScreen mainScreen].bounds.size.height
#define ScreenWeight [UIScreen mainScreen].bounds.size.width
//
//#define SW(w) ScreenWeight*(w/375.0)
//#define SH(h) ScreenHeight*(h/667.0)
#define AlertWidth 285
#define AlertHeight 285
#define ButtonHeight 45
#define ButtonEdge 25

@interface ELInputAlertView()
@property (nonatomic, strong) UIView * alertView;
@property (nonatomic, strong) UITextField * inputTF;

@property (nonatomic, strong) UIButton *topBtn;
@property (nonatomic, strong) UIButton *bottomBtn;



@end

@implementation ELInputAlertView
-(UITextField *)inputTF{
if (_inputTF == nil) {
_inputTF = [[UITextField alloc]init];
_inputTF.textColor = [UIColor blackColor];
_inputTF.font = [UIFont systemFontOfSize:18];
_inputTF.clearButtonMode = UITextFieldViewModeWhileEditing;
// _inputTF.layer.borderColor = EL242GrayColor.CGColor;
// _inputTF.layer.borderWidth = 1.0f;
//
UIView *leftView = [[UIView alloc]init];
leftView.frame = CGRectMake(0, 0, 5, 5);
_inputTF.leftView = leftView;
_inputTF.leftViewMode = UITextFieldViewModeAlways;
}
return _inputTF;
}
-(instancetype)initWithTittle:(NSString *)title withText:(NSString *)text withMessage:(NSString *)placeholder withLeftButton:(NSString *)leftTitle withRightButton:(NSString *)rightTitle{
if (self = [super init]) {
self.frame = [UIScreen mainScreen].bounds;
self.leftAutoHide = YES;
self.rightAutoHide = NO;
//
UIView * backgrand = [[UIView alloc]init];
backgrand.backgroundColor = [UIColor blackColor];
backgrand.alpha = 0.5;
backgrand.frame = self.frame;
[self addSubview:backgrand];
//
UIView * alertView = [[UIView alloc]init];
self.alertView = alertView;
alertView.frame = CGRectMake((ScreenWeight-AlertWidth)/2, (ScreenHeight - AlertHeight)/2, AlertWidth, AlertHeight);
alertView.backgroundColor = [UIColor whiteColor];
[self addSubview:alertView];
UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:alertView.bounds byRoundingCorners:(UIRectCornerAllCorners) cornerRadii:CGSizeMake(5, 5)];
CAShapeLayer * layer = [CAShapeLayer layer];
layer.frame = alertView.bounds;
layer.path = path.CGPath;
alertView.layer.mask = layer;
//标题
UILabel * titleLbl = [[UILabel alloc]init];
titleLbl.text = title;
titleLbl.textColor = [UIColor blackColor];
titleLbl.font = [UIFont systemFontOfSize:16];
titleLbl.textAlignment = NSTextAlignmentCenter;
titleLbl.frame = CGRectMake(10, 10, alertView.frame.size.width-20, 25);
[alertView addSubview:titleLbl];
//输入框
// if (IsEmptyStr(placeholder)) {
// placeholder = @"";
// }
self.inputTF.attributedPlaceholder = [[NSAttributedString alloc]initWithString:placeholder attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:18],NSForegroundColorAttributeName:[UIColor lightGrayColor]}];
self.inputTF.text = text;
[self.inputTF becomeFirstResponder];
self.inputTF.frame = CGRectMake(10, CGRectGetMaxY(titleLbl.frame)+55, alertView.frame.size.width-20, 40);
[alertView addSubview:self.inputTF];
//
UIView *lineView = [[UIView alloc] init];
lineView.backgroundColor = [UIColor blackColor];
[alertView addSubview:lineView];
[lineView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(15);
make.right.mas_equalTo(-15);
make.top.equalTo(self.inputTF.mas_bottom).mas_offset(5);
make.height.mas_equalTo(1);
}];
//下边按钮
UIButton * leftButton = [UIButton buttonWithType:(UIButtonTypeCustom)];
self.bottomBtn = leftButton;
[leftButton setTitle:leftTitle forState:(UIControlStateNormal)];
[leftButton setTitleColor:[UIColor redColor] forState:(UIControlStateNormal)];
[leftButton setTitleColor:[UIColor grayColor] forState:(UIControlStateHighlighted)];
leftButton.titleLabel.font = [UIFont systemFontOfSize:18];
leftButton.frame = CGRectMake(ButtonEdge, alertView.frame.size.height-ButtonHeight-5, alertView.frame.size.width-ButtonEdge*2, ButtonHeight);
[alertView addSubview:leftButton];
[leftButton addTarget:self action:@selector(leftAction:) forControlEvents:(UIControlEventTouchUpInside)];
//上边按钮
UIButton * rightButton = [UIButton buttonWithType:(UIButtonTypeCustom)];
self.topBtn = rightButton;
[rightButton setTitle:rightTitle forState:(UIControlStateNormal)];
[rightButton setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)];
[rightButton setTitleColor:[UIColor grayColor] forState:(UIControlStateHighlighted)];
rightButton.titleLabel.font = [UIFont systemFontOfSize:18];
rightButton.frame = CGRectMake(ButtonEdge, alertView.frame.size.height-ButtonHeight*2-10, alertView.frame.size.width-ButtonEdge*2, ButtonHeight);
[alertView addSubview:rightButton];
rightButton.backgroundColor = [UIColor blueColor];
[rightButton addTarget:self action:@selector(rightAction:) forControlEvents:(UIControlEventTouchUpInside)];
[rightButton setCornerRadii:CGSizeMake(ButtonHeight/2, ButtonHeight/2) withCorner:(UIRectCornerAllCorners)];
// //竖线
// UIView *sxLine = [[UIView alloc]init];
// sxLine.frame = CGRectMake(alertView.frame.size.width/2, alertView.frame.size.height-ButtonHeight, 1, ButtonHeight);
// sxLine.backgroundColor = EL242GrayColor;
// [alertView addSubview:sxLine];
// //横线
// UIView * hxLine = [[UIView alloc]init];
// hxLine.backgroundColor = EL242GrayColor;
// hxLine.frame = CGRectMake(0, alertView.frame.size.height-ButtonHeight, alertView.frame.size.width, 1);
// [alertView addSubview:hxLine];
//
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
return self;
}

-(void)setTopBtnBackColor:(UIColor *)topBtnBackColor{
_topBtnBackColor = topBtnBackColor;
self.topBtn.backgroundColor = topBtnBackColor;
}

-(void)keyboardWillShow:(NSNotification *)noti{
CGRect frame = [[[noti userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGRect alertFrame = self.alertView.frame;
alertFrame.origin.y = ScreenHeight - frame.size.height - AlertHeight - 10>0?ScreenHeight - frame.size.height - AlertHeight - 10:0;
self.alertView.frame = alertFrame;
}
-(void)keyboardWillHide:(NSNotification *)noti{
CGRect alertFrame = self.alertView.frame;
alertFrame.origin.y = (ScreenHeight - AlertHeight)/2;
self.alertView.frame = alertFrame;
}
-(void)leftAction:(UIButton *)sender{

if (self.leftBlock) {
self.leftBlock(self.inputTF.text);
[self hide];
[self.inputTF resignFirstResponder];
}
if (self.leftHideBlock) {
BOOL hide = self.leftHideBlock(self.inputTF.text, self);
if (hide == YES) {
[self hide];
[self.inputTF resignFirstResponder];
}
}
if (self.leftAutoHide) {
[self hide];
[self.inputTF resignFirstResponder];
}
}
-(void)rightAction:(UIButton *)sender{

if (self.rightBlock) {
self.rightBlock(self.inputTF.text);
[self hide];
[self.inputTF resignFirstResponder];
}
if (self.rightHideBlock) {
BOOL hide = self.rightHideBlock(self.inputTF.text, self);
if (hide == YES) {
[self.inputTF resignFirstResponder];
[self hide];
}
}
if (self.rightAutoHide) {
[self.inputTF resignFirstResponder];
[self hide];
}
}
-(void)show{
UIWindow * window = [UIApplication sharedApplication].windows.firstObject;
[window addSubview:self];
[self.alertView.layer addAnimation:[CABasicAnimation scaleShowAnimationWithDuration:ELAnimationDuration] forKey:@"ELInputAlertViewShowAnimation"];
}
-(void)hide{
[self.alertView.layer addAnimation:[CABasicAnimation scaleHideAnimationWithDuration:ELAnimationDuration] forKey:@"ELInputAlertViewHideAnimation"];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(ELAnimationDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self removeFromSuperview];
});
}

@end

+ 29
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/ELSelectView.h Ver arquivo

@@ -0,0 +1,29 @@
//
// ELSelectView.h
// Elink
//
// Created by iot_user on 2019/1/23.
// Copyright © 2019年 iot_iMac. All rights reserved.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface ELSelectViewCell : UITableViewCell
@property (nonatomic, strong) UILabel *titleLbl;

@end


@interface ELSelectView : UIView
@property (nonatomic, copy) void (^selectRowBlock)(NSInteger row);



-(instancetype)initWithTitle:(NSString *)title withSelectArray:(NSArray<NSString *> *)array;

-(void)show;
@end

NS_ASSUME_NONNULL_END

+ 180
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/ELSelectView.m Ver arquivo

@@ -0,0 +1,180 @@
//
// ELSelectView.m
// Elink
//
// Created by iot_user on 2019/1/23.
// Copyright © 2019年 iot_iMac. All rights reserved.
//

#import "ELSelectView.h"
#import "CABasicAnimation+ELAnimation.h"
#import "UILabel+WZAdd.h"
#import "Masonry.h"
#import "UIButton+WZAdd.h"
#import "AppDelegate.h"

//375x667的屏幕
#define ScreenH [UIScreen mainScreen].bounds.size.height
#define ScreenW [UIScreen mainScreen].bounds.size.width

#define MaxHeight ScreenH/2
#define MaxWeight 250
#define CellHeight 45

@implementation ELSelectViewCell

-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
if (self = [super initWithStyle:style
reuseIdentifier:reuseIdentifier]) {
self.titleLbl = [UILabel createWithFrame:CGRectZero bgColor:[UIColor whiteColor] text:nil textColor:[UIColor grayColor] font:[UIFont systemFontOfSize:18] align:NSTextAlignmentCenter];
self.titleLbl.numberOfLines=0;
self.titleLbl.adjustsFontSizeToFitWidth = YES;
[self.contentView addSubview:self.titleLbl];
[self.titleLbl mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.right.bottom.mas_equalTo(0);
}];
self.selectionStyle = UITableViewCellSelectionStyleNone;
}
return self;
}

@end

static NSString * ELSelectViewCellid = @"ELSelectViewCellid";

@interface ELSelectView()<UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) UITableView * tableView;
@property (nonatomic, strong) UIView *alertView;

@property (nonatomic, copy) NSArray * datas;

@end


@implementation ELSelectView
-(UITableView *)tableView{
if (_tableView == nil) {
_tableView = [[UITableView alloc]init];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.tableFooterView = [UIView new];
_tableView.separatorColor = [UIColor clearColor];
}
return _tableView;
}
-(instancetype)initWithTitle:(NSString *)title withSelectArray:(NSArray<NSString *> *)array{
if (self = [super init]) {
self.frame = [UIScreen mainScreen].bounds;
self.datas = [array copy];
//
UIView * backgrand = [[UIView alloc]init];
backgrand.backgroundColor = [UIColor blackColor];
backgrand.alpha = 0.5;
backgrand.frame = self.frame;
[self addSubview:backgrand];
//
CGFloat height = (array.count+1)*CellHeight;
height = (height > MaxHeight?MaxHeight:height)+33;
//TopMargin
UIView * alertView = [[UIView alloc]init];
self.alertView = alertView;
alertView.frame = CGRectMake((ScreenW-MaxWeight)/2,(ScreenH-height)/2, MaxWeight, height);
alertView.backgroundColor = [UIColor whiteColor];
// alertView.layer.cornerRadius = 5;
[self addSubview:alertView];
//
UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:alertView.bounds byRoundingCorners:(UIRectCornerAllCorners) cornerRadii:CGSizeMake(5, 5)];
CAShapeLayer * layer = [CAShapeLayer layer];
layer.frame = alertView.bounds;
layer.path = path.CGPath;
alertView.layer.mask = layer;
//
UILabel * titleLbl = [UILabel createWithFrame:CGRectZero bgColor:[UIColor whiteColor] text:title textColor:[UIColor lightGrayColor] font:[UIFont systemFontOfSize:15] align:NSTextAlignmentCenter];
[alertView addSubview:titleLbl];
[titleLbl mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.right.mas_equalTo(0);
make.height.mas_equalTo(33);
}];
//
UIButton * cancelBtn = [UIButton createWithFrame:CGRectZero bgColor:[UIColor whiteColor] font:[UIFont systemFontOfSize:16] norTitle:@"取消" norTitleColor:[UIColor lightGrayColor] norImage:nil borderColor:nil needRoundCorner:NO target:self action:@selector(cancelAction:)];
[cancelBtn setTitleColor:[UIColor redColor] forState:(UIControlStateHighlighted)];
[alertView addSubview:cancelBtn];
[cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.left.right.mas_equalTo(0);
make.height.mas_equalTo(CellHeight);
}];
//
[alertView addSubview:self.tableView];
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(0);
make.top.equalTo(titleLbl.mas_bottom).mas_offset(0);
make.bottom.equalTo(cancelBtn.mas_top).mas_equalTo(0);
}];
}
return self;
}
-(void)cancelAction:(UIButton *)sender{
[self hide];
}

-(void)show{
UIWindow * window = [UIApplication sharedApplication].windows.firstObject;;
[window addSubview:self];
[self.alertView.layer addAnimation:[CABasicAnimation scaleShowAnimationWithDuration:ELAnimationDuration] forKey:@"ELSelectViewShowAnimation"];
}

-(void)hide{
[self.alertView.layer addAnimation:[CABasicAnimation scaleHideAnimationWithDuration:ELAnimationDuration] forKey:@"ELSelectViewHideAnimation"];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(ELAnimationDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self removeFromSuperview];
});

}


#pragma mark ============ UITableView数据源方法 ==============
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.datas.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
ELSelectViewCell * cell = [tableView dequeueReusableCellWithIdentifier:ELSelectViewCellid];
if (cell == nil) {
cell = [[ELSelectViewCell alloc]initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:ELSelectViewCellid];
}
cell.titleLbl.text = self.datas[indexPath.row];
return cell;
}


#pragma mark ============ UITableView代理 ==============
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
ELSelectViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
cell.titleLbl.textColor = [UIColor blueColor];
cell.titleLbl.font = [UIFont systemFontOfSize:20];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(ELAnimationDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if (self.selectRowBlock) {
self.selectRowBlock(indexPath.row);
}

[self hide];
});

}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return CellHeight;
}
@end

+ 17
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/ToothbrushConnectionViewController.h Ver arquivo

@@ -0,0 +1,17 @@
//
// ToothbrushConnectionViewController.h
// AILinkBleSDKSourceCode
//
// Created by iot_user on 2020/9/29.
// Copyright © 2020 IOT. All rights reserved.
//

#import <UIKit/UIKit.h>
@class ELPeripheralModel;
NS_ASSUME_NONNULL_BEGIN

@interface ToothbrushConnectionViewController : UIViewController
@property (nonatomic, strong) ELPeripheralModel *p;
@end

NS_ASSUME_NONNULL_END

+ 550
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/ToothbrushConnectionViewController.m Ver arquivo

@@ -0,0 +1,550 @@
//
// ToothbrushConnectionViewController.m
// AILinkBleSDKSourceCode
//
// Created by iot_user on 2020/9/29.
// Copyright © 2020 IOT. All rights reserved.
//

#import "ToothbrushConnectionViewController.h"
#import <AILinkBleSDK/ELToothbrushBleManager.h>
#import "Masonry.h"
#import "ELInputAlertView.h"
#import "ELSelectView.h"

static NSString * const authorizeIntervalKey = @"authorizeIntervalKey";

@interface ToothbrushConnectionViewController ()<ToothbrushDelegate,ELBluetoothManagerDelegate,ElBleWifiDelegate>
@property (nonatomic, strong) UITextView *textView;
//附近wifi
@property (nonatomic, strong) NSMutableArray<ELBleWifiDetailModel *> *wifiArr;
@property (nonatomic, copy) NSString *wifiPwd;
@end

@implementation ToothbrushConnectionViewController

-(NSMutableArray<ELBleWifiDetailModel *> *)wifiArr{
if (_wifiArr==nil) {
_wifiArr = [[NSMutableArray alloc] init];
}
return _wifiArr;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self setupUI];
[[ELToothbrushBleManager shareManager] startScan];
[ELToothbrushBleManager shareManager].toothbrushDelegate = self;
[ELToothbrushBleManager shareManager].delegate = self;
[ELToothbrushBleManager shareManager].bleWifiDelegate = self;
}

-(void)addLog:(NSString *)log{
self.textView.text = [NSString stringWithFormat:@"%@\n%@",log,self.textView.text];
}
-(void)buttonAction:(UIButton *)sender{
NSInteger tag = sender.tag;
if (tag == 1) {
//MARK:配网
if ([ELToothbrushBleManager shareManager].state == ELBluetoothStateDidValidationPass) {
[self.wifiArr removeAllObjects];
[self addLog:@"正在搜索附近的WiFi..."];
//搜索附近网络
[[ELToothbrushBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeBleWifiGetNearbyWifi];
}else{
[self addLog:@"未连接设备"];
[self.navigationController popViewControllerAnimated:YES];
}
}else if (tag == 2){
//MARK:配对
long long interval = [[NSUserDefaults standardUserDefaults] integerForKey:authorizeIntervalKey];
if (interval == 0) {
interval = [[NSDate date] timeIntervalSince1970];
[[NSUserDefaults standardUserDefaults] setInteger:interval forKey:authorizeIntervalKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
[self addLog:@"发起配对"];
[[ELToothbrushBleManager shareManager] requestDeviceAuthorization:interval];
}
else if (tag == 3){
//MARK:获取设备ID
[self addLog:@"请求设备ID"];
[[ELToothbrushBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeBleWifiGetSNNumber];
}
else if (tag == 4){
//MARK:获取档位
[self addLog:@"请求支持的档位"];
[[ELToothbrushBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeGetBasicInfoData];
}else if (tag == 5){
//MARK:获取三轴方向
[self addLog:@"获取三轴方向"];
[[ELToothbrushBleManager shareManager] getTriaxialDirection];
}else if (tag == 6){
//MARK:获取三轴数据
[self addLog:@"获取三轴数据"];
[[ELToothbrushBleManager shareManager] getTriaxialData];
}else if (tag == 7){
//MARK:查询默认刷牙时长和工作档位
[self addLog:@"查询默认刷牙时长和工作档位"];
[[ELToothbrushBleManager shareManager] getWorkGear];
}
else if (tag == 8){
//MARK:查询手动设置信息
[self addLog:@"查询手动设置信息"];
[[ELToothbrushBleManager shareManager] getCustomGear];
}
else if (tag == 9){
//MARK:查询二级档位默认值
[self addLog:@"查询二级档位默认值"];
[[ELToothbrushBleManager shareManager] getTwoGearDefualt];
}else if (tag == 10){
//MARK:上报工作阶段
[self addLog:@"上报工作阶段"];
[[ELToothbrushBleManager shareManager] getWorkPhase];
}
else if (tag == 11){
//MARK:设置刷牙模式
[self addLog:@"设置刷牙模式:舒柔"];
[[ELToothbrushBleManager shareManager] setWorkGear:(ToothbrushGearTypeSoft) interval:120 supportGearType:(ToothSupportGearTypeOneGear)];
}else if (tag == 12){
//MARK:开关
[self addLog:@"开关"];
[[ELToothbrushBleManager shareManager] switchToothbrush];
}else if (tag == 13){
//MARK:设置二档默认
[self addLog:@"设置二档默认(清洁)"];
[[ELToothbrushBleManager shareManager] setTwoGearDefaultGear:(ToothbrushGearTypeClean)];
}else if (tag == 14){
//MARK:试用
[self addLog:@"试用,手动设置,二档,frequency:67 duty:50"];
[[ELToothbrushBleManager shareManager] tryGear:(ToothbrushGearTypeCustom) supportType:(ToothSupportGearTypeTwoGear) frequency:67 duty:50];
}else if (tag == 15){
//MARK:设置手动档
[self addLog:@"设置手动档:frequency:67 duty:50 interval:120"];
[[ELToothbrushBleManager shareManager] setCustomGearData:67 duty:50 interval:120];
}else if (tag == 16){
//MARK:上报接收数据结果
[self addLog:@"上报接收数据结果"];
[[ELToothbrushBleManager shareManager] reportReceiveResultOfToothbrushData:YES];
}
else{
}

}
-(void)setupUI{
self.view.backgroundColor = [UIColor whiteColor];
UIButton *button1 = [self getButtonWithTitle:@"配网" withTag:1];
[self.view addSubview:button1];
[button1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(10);
make.top.mas_equalTo(70);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button2 = [self getButtonWithTitle:@"配对" withTag:2];
[self.view addSubview:button2];
[button2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button1.mas_right).mas_offset(5);
make.top.equalTo(button1);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button3 = [self getButtonWithTitle:@"获取设备ID" withTag:3];
[self.view addSubview:button3];
[button3 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button2.mas_right).mas_offset(5);
make.top.equalTo(button2);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button4 = [self getButtonWithTitle:@"获取档位" withTag:4];
[self.view addSubview:button4];
[button4 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button3.mas_right).mas_offset(5);
make.top.equalTo(button3);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button5 = [self getButtonWithTitle:@"获取三轴方向" withTag:5];
[self.view addSubview:button5];
[button5 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(10);
make.top.equalTo(button4.mas_bottom).mas_offset(10);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button6 = [self getButtonWithTitle:@"获取三轴数据" withTag:6];
[self.view addSubview:button6];
[button6 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button5.mas_right).mas_offset(5);
make.top.equalTo(button5);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button7 = [self getButtonWithTitle:@"查询默认模式和时长" withTag:7];
[self.view addSubview:button7];
[button7 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button6.mas_right).mas_offset(5);
make.top.equalTo(button6);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button8 = [self getButtonWithTitle:@"查询手动设置" withTag:8];
[self.view addSubview:button8];
[button8 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button7.mas_right).mas_offset(5);
make.top.equalTo(button7);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button9 = [self getButtonWithTitle:@"查询二级档位默认" withTag:9];
[self.view addSubview:button9];
[button9 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button5);
make.top.equalTo(button5.mas_bottom).mas_offset(10);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button10 = [self getButtonWithTitle:@"上报工作阶段" withTag:10];
[self.view addSubview:button10];
[button10 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button9.mas_right).mas_offset(5);
make.top.equalTo(button9);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button11 = [self getButtonWithTitle:@"设置刷牙模式(0A)" withTag:11];
[self.view addSubview:button11];
[button11 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button10.mas_right).mas_offset(5);
make.top.equalTo(button9);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button12 = [self getButtonWithTitle:@"开关" withTag:12];
[self.view addSubview:button12];
[button12 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button11.mas_right).mas_offset(5);
make.top.equalTo(button9);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button13 = [self getButtonWithTitle:@"设置二档默认" withTag:13];
[self.view addSubview:button13];
[button13 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button9);
make.top.equalTo(button9.mas_bottom).mas_offset(10);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button14 = [self getButtonWithTitle:@"试用" withTag:14];
[self.view addSubview:button14];
[button14 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button13.mas_right).mas_offset(5);
make.top.equalTo(button13);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
UIButton *button15 = [self getButtonWithTitle:@"设置手动档" withTag:15];
[self.view addSubview:button15];
[button15 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button14.mas_right).mas_offset(5);
make.top.equalTo(button13);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];

UIButton *button16 = [self getButtonWithTitle:@"上报接收数据结果" withTag:16];
[self.view addSubview:button16];
[button16 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(button15.mas_right).mas_offset(5);
make.top.equalTo(button13);
make.width.mas_equalTo(70);
make.height.mas_equalTo(30);
}];
//
self.textView = [[UITextView alloc] init];
self.textView.backgroundColor = [UIColor blackColor];
self.textView.text = @"Log";
self.textView.textColor = [UIColor redColor];
self.textView.font = [UIFont systemFontOfSize:16];
self.textView.editable = NO;
[self.view addSubview:self.textView];
[self.textView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(10);
make.right.bottom.mas_equalTo(-10);
make.height.mas_equalTo(200);
}];
}

-(UIButton *)getButtonWithTitle:(NSString *)title withTag:(NSInteger)tag{
UIButton *button1 = [UIButton buttonWithType:(UIButtonTypeCustom)];
[button1 setTitle:title forState:(UIControlStateNormal)];
button1.tag = tag;
button1.titleLabel.adjustsFontSizeToFitWidth = YES;
button1.titleLabel.numberOfLines = 2;
button1.titleLabel.font = [UIFont systemFontOfSize:15];
[button1 setTitleColor:[UIColor redColor] forState:(UIControlStateNormal)];
button1.backgroundColor = [UIColor blackColor];
button1.titleLabel.textAlignment = NSTextAlignmentCenter;
button1.titleLabel.adjustsFontSizeToFitWidth = YES;
[button1 addTarget:self action:@selector(buttonAction:) forControlEvents:(UIControlEventTouchUpInside)];
return button1;
}

-(void)connectWiFiWithPwd:(NSString *)pwd wifi:(ELBleWifiDetailModel *)wifi{
[self addLog:@"正在配置WiFi名称"];
self.wifiPwd = pwd;
[[ELToothbrushBleManager shareManager] bleWifiSetConnectWifiMac:wifi.macData];
}

-(void)connectWiFi:(ELBleWifiDetailModel *)wifi{
if (wifi.secureType ==ELBleWifiSecureTypeOpen) {
[self connectWiFiWithPwd:@"" wifi:wifi];
}else{
ELInputAlertView *input = [[ELInputAlertView alloc] initWithTittle:@"配置WiFi" withText:@"" withMessage:@"请输入WiFi密码" withLeftButton:@"取消" withRightButton:@"确定"];

[input show];
__weak typeof(self) weakSelf = self;
input.rightHideBlock = ^BOOL(NSString * _Nonnull text, UIView * _Nonnull view) {
if ([ELBlePublicTool legalBleWifiPassword:text]) {
[weakSelf connectWiFiWithPwd:text wifi:wifi];
return YES;
}else{
[self addLog:@"请输入8~56位的密码"];
return NO;
}

};
}
}
#pragma mark ============ ElBleWifiDelegate ==============

//获取设备ID
-(void)bleWifiReceiveWifiSNCode:(int)code{
if (code == 0) {
[self addLog:@"设备ID不存在,请先配网再获取"];
}else{
[self addLog:[NSString stringWithFormat:@"设备ID = %d",code]];
}

}
//设置wifi过程结果
-(void)bleWifiReceiceResponseType:(ELInetSetCmdType)type result:(ELSetBluetoothResponseType)result{
if (result == ELSetBluetoothResponseTypeSuccess) {
//设置WiFi结果
if (type == ELInetSetCmdTypeBleWifiSetWifiMac) {
[self addLog:@"正在配置WiFi密码"];
[[ELToothbrushBleManager shareManager] bleWifiSetWifiPwd:self.wifiPwd];
}else if (type == ELInetSetCmdTypeBleWifiSetWifiPwd){
[self addLog:@"设置WiFi连接"];
[[ELToothbrushBleManager shareManager] bleWifiSetupWifiConnect:YES];
}else if (type == ELInetSetCmdTypeBleWifiSetConnectWifi){
//获取连接状态
}
}
else{
[self addLog:@"WiFi配置失败"];
}
}
//附近wifi
-(void)bleWifiReceiveWifiDetailModel:(ELBleWifiDetailModel *)model{
[self addLog:[NSString stringWithFormat:@"搜索到wifi类型---%lu 名称---%@",(unsigned long)model.wifiState,model.wifiName]];
if (model.wifiState == ELBleWifiUseStateConnected) {
}
[self.wifiArr addObject:model];
}
//附近wifi搜索结果
-(void)bleWifiReceiveScanedWifiCount:(int)count {
[self addLog:@"搜索完成"];
//扫描结束
NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i=0; i<self.wifiArr.count; i++) {
ELBleWifiDetailModel *model = self.wifiArr[i];
NSString *wifiTypeStr = [NSString stringWithFormat:@"wifi类型:%lu 名称:%@",(unsigned long)model.secureType,model.wifiName];
if (model.secureType == ELBleWifiSecureTypeOpen) {
wifiTypeStr = [NSString stringWithFormat:@"wifi类型:%@ 名称:%@",@"Open",model.wifiName];
}else if (model.secureType == ELBleWifiSecureTypeWEP){
wifiTypeStr = [NSString stringWithFormat:@"wifi类型:%@ 名称:%@",@"WEP",model.wifiName];
}else if (model.secureType == ELBleWifiSecureTypeWPA_PSK){
wifiTypeStr = [NSString stringWithFormat:@"wifi类型:%@ 名称:%@",@"WPA_PSK",model.wifiName];
}else if (model.secureType == ELBleWifiSecureTypeWPA2_PSK){
wifiTypeStr = [NSString stringWithFormat:@"wifi类型:%@ 名称:%@",@"WPA2_PSK",model.wifiName];
}else if (model.secureType == ELBleWifiSecureTypeWPA_WPA_2_PSK){
wifiTypeStr = [NSString stringWithFormat:@"wifi类型:%@ 名称:%@",@"WPA_WPA_2_PSK",model.wifiName];
}else if (model.secureType == ELBleWifiSecureTypeWPA2_ENTERPRISE){
wifiTypeStr = [NSString stringWithFormat:@"wifi类型:%@ 名称:%@",@"WPA2_ENTERPRISE",model.wifiName];
}

[array addObject:wifiTypeStr];
}
ELSelectView *selectView = [[ELSelectView alloc] initWithTitle:@"附近WiFi" withSelectArray:array];
[selectView show];
__weak typeof(self) weakSelf = self;
selectView.selectRowBlock = ^(NSInteger row) {
[weakSelf connectWiFi:weakSelf.wifiArr[row]];
};
}
//连接状态
-(void)toothbrushReceiveState:(ELBluetoothState)state{
if (state == ELBluetoothStateUnavailable) {
self.title = @"请打开蓝牙";
}else if (state == ELBluetoothStateScaning || state == ELBluetoothStateWillConnect || state == ELBluetoothStateDidConnect){
self.title = @"正在连接...";
}else if (state == ELBluetoothStateConnectFail || state == ELBluetoothStateDidDisconnect || state == ELBluetoothStateFailedValidation){
self.title = @"连接断开";
}else if (state == ELBluetoothStateDidValidationPass){
self.title = @"连接成功";
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.title = self.p.macAddress;
});
//获取版本号
[[ELToothbrushBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeGetBMVersion)];
//获取电量
[[ELToothbrushBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeGetBatteryState)];
//获取蓝牙和wifi连接状态
[[ELToothbrushBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeGetConnectState)];
}
}
#pragma mark ============ ELBluetoothManagerDelegate ==============

//
-(void)bluetoothManagerReceiveDeviceAuthorizeResult:(ELBluetoothDeviceAuthorizeResult)result{
if (result == ELBluetoothDeviceAuthorizeResultNoAuth) {
[self addLog:@"没有授权,请授权"];
}else if (result == ELBluetoothDeviceAuthorizeResultAuthorized){
[self addLog:@"已经授权"];
}else if (result == ELBluetoothDeviceAuthorizeResultNoNeed){
[self addLog:@"不需要授权"];
}else if (result == ELBluetoothDeviceAuthorizeResultSuccess){
[self addLog:@"授权成功"];
}
}
//蓝牙和wifi连接状态
-(void)bluetoothManagerReceiveMCUConnectedState:(struct ELMCUStateStruct)stateStrct{
[self addLog:[NSString stringWithFormat:@"wifi连接状态:%lu \n0:没有连接\n1:尝试连接热点,但是失败\n2:连接热点,热点无网络\n3:连接热点,热点有网络\n4:有热点信息,未连接",(unsigned long)stateStrct.wifiState]];
}
//电量
-(void)bluetoothManagerReceiveBattery:(struct ELBatteryStruct)battery{
[self addLog:[NSString stringWithFormat:@"设备电量为:%d",battery.power]];
}
//版本号
-(void)bluetoothManagerReceiveBMVersion:(NSString *)bmVersion{
[self addLog:[NSString stringWithFormat:@"BM版本号为:%@",bmVersion]];
}
#pragma mark ============ ToothbrushDelegate ==============

//试用
-(void)toothbrushReceiveTryResult:(ToothbrushSetResult)result{
[self addLog:[NSString stringWithFormat:@"试用结果:%lu",result]];
}
//设置二档默认
-(void)toothbrushReceiveSettingTwoGearDefaultResult:(ELSetBluetoothResponseType)result{
[self addLog:[NSString stringWithFormat:@"设置二档默认结果:%lu",result]];
}
//开关
-(void)toothbrushReceiveSwitchResult:(ToothbrushSetResult)result{
[self addLog:[NSString stringWithFormat:@"开关结果:%lu",result]];
}
//设置刷牙模式结果
-(void)toothbrushReceiveSetWorkGearResult:(ELSetBluetoothResponseType)result{
[self addLog:[NSString stringWithFormat:@"设置刷牙模式结果:%lu",(unsigned long)result]];
}
//刷牙数据
-(void)toothbrushtReceiveToothbrushData:(ToothbrushData)data{
[self addLog:[NSString stringWithFormat:@"刷牙数据:档位=%lu,工作时长=%d,左时长=%d,右时长=%d,电量=%d",(unsigned long)data.gear,data.workTime,data.leftTime,data.rightTime,data.battery]];
}
//上报工作阶段
-(void)toothbrushReceiveWorkPhase:(ToothBrushWorkPhase)workPhase{
[self addLog:[NSString stringWithFormat:@"当前工作阶段:%lu,档位:%lu, 第%lu档",workPhase.workPhase,workPhase.gear,workPhase.supportType]];
}
//获取二档档位信息
-(void)toothbrushReceiveTwoGearDefault:(ToothbrushGearType)gear{
[self addLog:[NSString stringWithFormat:@"二档默认档:%lu",gear]];
}
//手动设置信息
-(void)toothbrushReceiveCustomData:(ToothbrushCustomData)custom{
[self addLog:[NSString stringWithFormat:@"频率:%d 占空比:%d 时长:%d",custom.frequency,custom.duty,custom.interval]];
}
//默认档位和时长
-(void)toothbrushReceiveWorkGear:(ToothbrushWorkGear)workGear{
[self addLog:[NSString stringWithFormat:@"档位:%lu 时长:%d",workGear.gearType,workGear.interval]];
}
//三轴数据
-(void)toothbrushReceiveTriaxialData:(BOOL)success triaxialX:(int)x triaxialY:(int)y triaxialZ:(int)z{
if (success) {
[self addLog:[NSString stringWithFormat:@"三轴数据:x = %d , y = %d , = %d",x,y,z]];
}else{
[self addLog:@"三轴数据获取失败"];
}

}
//三轴方向
-(void)toothbrushReceiveTriaxialDirection:(ToothbrushTriaxialDirection)direction{
if (direction == ToothbrushTriaxialDirectionYTop) {
[self addLog:@"Y轴朝上"];
}else if (direction == ToothbrushTriaxialDirectionYBottom){
[self addLog:@"Y轴朝下"];
}else if (direction == ToothbrushTriaxialDirectionYLeft){
[self addLog:@"Y轴朝左"];
}else if (direction == ToothbrushTriaxialDirectionYRight){
[self addLog:@"Y轴朝右"];
}

}
-(void)toothbrushReceiveOneGear:(NSArray<NSNumber *> *)oneGear twoGear:(NSArray<NSNumber *> *)twoGear{
NSString *onegearStr = @"一档:";
for (NSNumber *one in oneGear) {
onegearStr = [NSString stringWithFormat:@"%@,%@",onegearStr,one];
}
NSString *twogearStr = @"二档:";
for (NSNumber *two in twoGear) {
twogearStr = [NSString stringWithFormat:@"%@,%@",twogearStr,two];
}
[self addLog:[NSString stringWithFormat:@"%@\n%@",onegearStr,twogearStr]];
}

-(void)toothbrushReceiveDevices:(NSArray<ELPeripheralModel *> *)devices{
ELPeripheralModel * connectModel;
for (ELPeripheralModel *deviceModel in devices) {
if ([deviceModel.macAddress isEqualToString:self.p.macAddress]) {
connectModel = deviceModel;
break;
}
}
if (connectModel) {
[[ELToothbrushBleManager shareManager] connectPeripheral:connectModel];
}

}
-(void)dealloc{
[[ELToothbrushBleManager shareManager] disconnectPeripheral];
}

@end

+ 17
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/ToothbrushScanViewController.h Ver arquivo

@@ -0,0 +1,17 @@
//
// ToothbrushScanViewController.h
// AILinkBleSDKSourceCode
//
// Created by iot_user on 2020/9/29.
// Copyright © 2020 IOT. All rights reserved.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface ToothbrushScanViewController : UIViewController

@end

NS_ASSUME_NONNULL_END

+ 89
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/ToothbrushScanViewController.m Ver arquivo

@@ -0,0 +1,89 @@
//
// ToothbrushScanViewController.m
// AILinkBleSDKSourceCode
//
// Created by iot_user on 2020/9/29.
// Copyright © 2020 IOT. All rights reserved.
//

#import "ToothbrushScanViewController.h"
#import "Masonry.h"
#import "ToothbrushConnectionViewController.h"
#import <AILinkBleSDK/ELToothbrushBleManager.h>
#import "ToothbrushScanViewController.h"

@interface ToothbrushScanViewController ()<UITableViewDelegate,UITableViewDataSource,ToothbrushDelegate>
@property (nonatomic, strong) UITableView *tableView;

@property (nonatomic, strong) NSArray<ELPeripheralModel *> *devices;

@end

@implementation ToothbrushScanViewController

- (void)viewDidLoad {
[super viewDidLoad];
// self.title = @"Devices";
[self.view addSubview:self.tableView];
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.right.bottom.mas_equalTo(0);
}];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[[ELToothbrushBleManager shareManager] startScan];
[ELToothbrushBleManager shareManager].toothbrushDelegate = self;
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
[[ELToothbrushBleManager shareManager] stopScan];
}
#pragma mark ============ ELBluetoothManagerDelegate ==============
-(void)toothbrushReceiveState:(ELBluetoothState)state{
NSLog(@"bluetoothManagerUpdateBleState = %ld",state);
}
-(void)toothbrushReceiveDevices:(NSArray<ELPeripheralModel *> *)devices{
self.devices = devices;
[self.tableView reloadData];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.devices.count;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 60;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellId = @"cellid";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellId];
}
ELPeripheralModel *p = self.devices[indexPath.row];
cell.textLabel.text = [NSString stringWithFormat:@"Name:%@---Mac:%@\nCID:%ld---VID:%ld---PID:%ld",p.deviceName,p.macAddress,p.deviceType,p.vendorID,p.productID];
cell.textLabel.numberOfLines = 2;
cell.textLabel.textColor = [UIColor blackColor];
return cell;

}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
ELPeripheralModel *p = self.devices[indexPath.row];
ToothbrushConnectionViewController *vc = [[ToothbrushConnectionViewController alloc] init];
vc.p = p;
[self.navigationController pushViewController:vc animated:YES];
}
-(UITableView *)tableView{
if (_tableView == nil) {
_tableView = [[UITableView alloc] init];
_tableView.delegate = self;
_tableView.dataSource = self;
}
return _tableView;
}

@end

+ 19
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/UIButton+WZAdd.h Ver arquivo

@@ -0,0 +1,19 @@
//
// UIButton+WZAdd.h
// 常用UI控件封装
//
// Created by iot_iMac on 2018/6/21.
// Copyright © 2018年 iot_iMac. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIButton (WZAdd)


/*
* 注意:如果needRoundCorner=YES,则必须设置frame的height值,否则无法实现圆角
*/
+ (UIButton *)createWithFrame:(CGRect)frame bgColor:(UIColor *)bgColor font:(UIFont *)font norTitle:(NSString *)norTitle norTitleColor:(UIColor *)norTitleColor norImage:(UIImage *)norImage borderColor:(UIColor *)borderColor needRoundCorner:(BOOL)needRoundCorner target:(id)target action:(SEL)action;

@end

+ 65
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/UIButton+WZAdd.m Ver arquivo

@@ -0,0 +1,65 @@
//
// UIButton+WZAdd.m
// 常用UI控件封装
//
// Created by iot_iMac on 2018/6/21.
// Copyright © 2018年 iot_iMac. All rights reserved.
//

#import "UIButton+WZAdd.h"

@implementation UIButton (WZAdd)


/*
* 注意:如果needRoundCorner=YES,则必须设置frame的height值,否则无法实现圆角
*/
+ (UIButton *)createWithFrame:(CGRect)frame bgColor:(UIColor *)bgColor font:(UIFont *)font norTitle:(NSString *)norTitle norTitleColor:(UIColor *)norTitleColor norImage:(UIImage *)norImage borderColor:(UIColor *)borderColor needRoundCorner:(BOOL)needRoundCorner target:(id)target action:(SEL)action {
//这3项必须有值
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = frame;
btn.titleLabel.textAlignment = NSTextAlignmentCenter;
btn.titleLabel.numberOfLines = 0;
btn.titleLabel.adjustsFontSizeToFitWidth = YES;
//以下各项均可为nil
if (font) {
btn.titleLabel.font = font;
}
if (bgColor) {
[btn setBackgroundColor:bgColor];
}
if (norTitle) {
[btn setTitle:norTitle forState:UIControlStateNormal];
}

if (norTitleColor) {
[btn setTitleColor:norTitleColor forState:(UIControlStateNormal)];
}
if (norImage) {
[btn setImage:norImage forState:UIControlStateNormal];
}
if (borderColor) {
btn.layer.borderColor = borderColor.CGColor;
btn.layer.borderWidth = 1;
}
if (needRoundCorner) {
btn.layer.cornerRadius = btn.bounds.size.height/2;
btn.layer.masksToBounds = YES; //防止设置了图片,不能显示圆角问题
}
if (action) { //target可为nil,action不可为nil
[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
}

return btn;
}

@end

+ 15
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/UILabel+WZAdd.h Ver arquivo

@@ -0,0 +1,15 @@
//
// UILabel+WZAdd.h
// 常用UI控件封装
//
// Created by iot_iMac on 2018/6/21.
// Copyright © 2018年 iot_iMac. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UILabel (WZAdd)

+ (UILabel *)createWithFrame:(CGRect)frame bgColor:(UIColor *)bgColor text:(NSString *)text textColor:(UIColor *)textColor font:(UIFont *)font align:(NSTextAlignment)align;

@end

+ 37
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/UILabel+WZAdd.m Ver arquivo

@@ -0,0 +1,37 @@
//
// UILabel+WZAdd.m
// 常用UI控件封装
//
// Created by iot_iMac on 2018/6/21.
// Copyright © 2018年 iot_iMac. All rights reserved.
//

#import "UILabel+WZAdd.h"

@implementation UILabel (WZAdd)

+ (UILabel *)createWithFrame:(CGRect)frame bgColor:(UIColor *)bgColor text:(NSString *)text textColor:(UIColor *)textColor font:(UIFont *)font align:(NSTextAlignment)align {
UILabel *lbl = [[UILabel alloc] initWithFrame:frame];
lbl.textAlignment = align;

if (text) {
lbl.text = text;
}

if (textColor) {
lbl.textColor = textColor;
}

if (bgColor) {
lbl.backgroundColor = bgColor;
}
if (font) {
lbl.font = font;
}

return lbl;
}

@end

+ 32
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/UIView+Category.h Ver arquivo

@@ -0,0 +1,32 @@
//
// UIView+Category.h
// GoodNutrition
//
// Created by iot_user on 2018/10/23.
// Copyright © 2018年 Percyyang. All rights reserved.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIView (Category)
@property (nonatomic, assign) CGFloat x;
@property (nonatomic, assign) CGFloat y;
@property (nonatomic, assign) CGFloat width;
@property (nonatomic, assign) CGFloat height;
@property (nonatomic, assign) CGSize size;


/**
给View 添加圆角
@param cornerRadii cornerRadii
@param corner cornerRadii
*/
-(void)setCornerRadii:(CGSize)cornerRadii withCorner:(UIRectCorner)corner;
//
- (void)setViewLayerCornerRadius:(CGFloat)cornerRadius shadowOffset:(CGSize)shadowOffset shadowOpacity:(CGFloat)shadowOpacity shadowRadius:(CGFloat)shadowRadius shadowColor:(UIColor *)shadowColor;
@end

NS_ASSUME_NONNULL_END

+ 71
- 0
AILinkBleSDKDemo/蓝牙WiFi牙刷/UIView+Category.m Ver arquivo

@@ -0,0 +1,71 @@
//
// UIView+Category.m
// GoodNutrition
//
// Created by iot_user on 2018/10/23.
// Copyright © 2018年 Percyyang. All rights reserved.
//

#import "UIView+Category.h"

@implementation UIView (Category)
-(void)setX:(CGFloat)x{
CGRect frame = self.frame;
frame.origin.x = x;
self.frame=frame;
}
-(CGFloat)x{
return self.frame.origin.x;
}
-(void)setY:(CGFloat)y{
CGRect frame = self.frame;
frame.origin.y = y;
self.frame = frame;
}
-(CGFloat)y{
return self.frame.origin.y;
}
-(void)setWidth:(CGFloat)width{
CGRect frame = self.frame;
frame.size.width = width;
self.frame = frame;
}
-(CGFloat)width{
return self.frame.size.width;
}
-(void)setHeight:(CGFloat)height{
CGRect frame = self.frame;
frame.size.height = height;
self.frame = frame;
}
-(CGFloat)height{
return self.frame.size.height;
}
-(void)setSize:(CGSize)size{
CGRect frame = self.frame;
frame.size = size;
self.frame = frame;
}
-(CGSize)size{
return self.frame.size;
}

- (void)setViewLayerCornerRadius:(CGFloat)cornerRadius shadowOffset:(CGSize)shadowOffset shadowOpacity:(CGFloat)shadowOpacity shadowRadius:(CGFloat)shadowRadius shadowColor:(UIColor *)shadowColor{
self.layer.cornerRadius = cornerRadius;
self.layer.masksToBounds = NO;
self.layer.shadowColor = shadowColor.CGColor;
self.layer.shadowOffset = shadowOffset;
self.layer.shadowOpacity = shadowOpacity;
self.layer.shadowRadius = shadowRadius;
}

-(void)setCornerRadii:(CGSize)cornerRadii withCorner:(UIRectCorner)corner{
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:corner cornerRadii:cornerRadii];
CAShapeLayer *layer = [CAShapeLayer layer];
layer.frame = self.bounds;
layer.path = path.CGPath;
self.layer.mask = layer;
}
@end

Carregando…
Cancelar
Salvar