Skip to content

Commit

Permalink
iOS update 2.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
adamsfliu authored and AbySwifter committed Jun 23, 2024
1 parent 1b6a498 commit 05042c8
Show file tree
Hide file tree
Showing 103 changed files with 2,371 additions and 2,132 deletions.
12 changes: 12 additions & 0 deletions iOS/Example/App/Assets.xcassets/goLive.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "goLive.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.
12 changes: 12 additions & 0 deletions iOS/Example/App/Assets.xcassets/leave_icon.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "leave_icon.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "liveList_normal.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "liveList_selected.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.
12 changes: 12 additions & 0 deletions iOS/Example/App/Assets.xcassets/me_normal.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "me.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.
12 changes: 12 additions & 0 deletions iOS/Example/App/Assets.xcassets/me_selected.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "me_selected.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "top_background.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.
62 changes: 39 additions & 23 deletions iOS/Example/App/Login/LoginRootView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,21 @@
// Copyright © 2021 Tencent. All rights reserved.
//

import UIKit
import SnapKit
import UIKit

class LoginRootView: UIView {

lazy var logoContentView: UIView = {
let view = UIView(frame: .zero)
view.backgroundColor = UIColor.white
return view
}()

lazy var tencentCloudImage: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "tencent_cloud"))
return imageView
}()

lazy var titleLabel: UILabel = {
let label = UILabel(frame: .zero)
label.font = UIFont.systemFont(ofSize: 32)
Expand All @@ -28,7 +29,7 @@ class LoginRootView: UIView {
label.numberOfLines = 0
return label
}()

lazy var userIdContentView: UIView = {
let view = UIView(frame: .zero)
view.backgroundColor = UIColor.white
Expand All @@ -38,13 +39,15 @@ class LoginRootView: UIView {
view.layer.borderColor = UIColor.gray.cgColor
return view
}()

lazy var userIdTextLable: UILabel = {
let label = UILabel(frame: .zero)
label.font = UIFont.systemFont(ofSize: 20)
label.textColor = UIColor.black
label.text = "UserId"
return label
}()

lazy var userIdTextField: UITextField = {
let textField = UITextField(frame: .zero)
textField.backgroundColor = UIColor.white
Expand All @@ -54,6 +57,7 @@ class LoginRootView: UIView {
textField.delegate = self
return textField
}()

weak var currentTextField: UITextField?
lazy var loginBtn: UIButton = {
let btn = UIButton(type: .system)
Expand All @@ -68,10 +72,10 @@ class LoginRootView: UIView {
btn.layer.cornerRadius = 10
return btn
}()

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)

if let current = currentTextField {
current.resignFirstResponder()
currentTextField = nil
Expand All @@ -80,17 +84,17 @@ class LoginRootView: UIView {
self.transform = .identity
}
}

weak var rootVC: LoginViewController?

override init(frame: CGRect) {
super.init(frame: frame)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

var isViewReady = false
override func didMoveToWindow() {
super.didMoveToWindow()
Expand All @@ -102,7 +106,7 @@ class LoginRootView: UIView {
activateConstraints()
bindInteraction()
}

func constructViewHierarchy() {
addSubview(logoContentView)
logoContentView.addSubview(tencentCloudImage)
Expand All @@ -112,53 +116,54 @@ class LoginRootView: UIView {
userIdContentView.addSubview(userIdTextField)
addSubview(loginBtn)
}

func activateConstraints() {
logoContentView.snp.makeConstraints { make in
make.top.equalToSuperview().offset(100)
make.leading.equalToSuperview().offset(20)
make.trailing.equalToSuperview().offset(-20)
make.height.equalTo(100)
}
tencentCloudImage.snp.makeConstraints { (make) in
tencentCloudImage.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.leading.equalToSuperview().offset(20)
make.height.equalTo(80)
make.width.equalTo(80)
}
titleLabel.snp.makeConstraints { (make) in
titleLabel.snp.makeConstraints { make in
make.centerY.equalTo(tencentCloudImage.snp.centerY)
make.leading.equalTo(tencentCloudImage.snp.trailing).offset(10)
make.trailing.equalToSuperview().offset(-20)
}
userIdContentView.snp.makeConstraints { (make) in

userIdContentView.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.leading.equalToSuperview().offset(20)
make.trailing.equalToSuperview().offset(-20)
make.height.equalTo(60)
}
userIdTextLable.snp.makeConstraints { (make) in
userIdTextLable.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.leading.equalToSuperview().offset(20)
}
userIdTextField.snp.makeConstraints { (make) in
userIdTextField.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.leading.equalTo(userIdTextLable.snp.trailing).offset(20)
make.trailing.equalToSuperview().offset(-20)
}
loginBtn.snp.makeConstraints { (make) in

loginBtn.snp.makeConstraints { make in
make.top.equalTo(userIdContentView.snp.bottom).offset(40)
make.leading.equalToSuperview().offset(20)
make.trailing.equalToSuperview().offset(-20)
make.height.equalTo(52)
}
}

func bindInteraction() {
loginBtn.addTarget(self, action: #selector(loginBtnClick), for: .touchUpInside)
}

@objc func loginBtnClick() {
if let current = currentTextField {
current.resignFirstResponder()
Expand All @@ -178,22 +183,33 @@ extension LoginRootView: UITextFieldDelegate {
currentTextField = textField
textField.becomeFirstResponder()
}

public func textFieldDidEndEditing(_ textField: UITextField) {
textField.resignFirstResponder()
currentTextField = nil
}

public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
public func textField(_ textField: UITextField,

public func textField(_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool {
return true
if string.isEmpty {
return true
}

let allowedCharacters =
CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_")
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet)
}
}

/// MARK: - internationalization string
// MARK: - internationalization string

fileprivate extension String {
static let titleText = TUILiveKitAppLocalize("TUILiveKitApp.Login.tencentcloud")
static let phoneNumPlaceholderText = TUILiveKitAppLocalize("TUILiveKitApp.Login.enterphonenumber")
Expand Down
66 changes: 66 additions & 0 deletions iOS/Example/App/Main/AlignmentButton.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
//
// AlignmentButton.swift
// TUILiveKitApp
//
// Created by krabyu on 2024/6/19.
//

import UIKit

class AlignmentButton: UIButton {
enum ImageAlignment: NSInteger {
case left = 0
case top
case bottom
case right
}
var imageAlignment: ImageAlignment = .left
var spaceBetweenTitleAndImage: CGFloat = 0

override func layoutSubviews() {
super.layoutSubviews()

let space: CGFloat = self.spaceBetweenTitleAndImage

let titleWidth: CGFloat = self.titleLabel?.bounds.width ?? 0
let titleHeight: CGFloat = self.titleLabel?.bounds.height ?? 0

let imageWidth: CGFloat = self.imageView?.bounds.width ?? 0
let imageHeight: CGFloat = self.imageView?.bounds.height ?? 0

let buttonCenterX: CGFloat = self.bounds.width / 2
let imageCenterX: CGFloat = buttonCenterX - titleWidth / 2
let titleCenterX = buttonCenterX + imageWidth / 2

switch self.imageAlignment {
case .top:
self.titleEdgeInsets = UIEdgeInsets(top: imageHeight / 2 + space / 2,
left: -(titleCenterX - buttonCenterX),
bottom: -(imageHeight/2 + space/2),
right: titleCenterX-buttonCenterX)
self.imageEdgeInsets = UIEdgeInsets(top: -(titleHeight / 2 + space / 2),
left: buttonCenterX - imageCenterX,
bottom: titleHeight / 2 + space / 2,
right: -(buttonCenterX - imageCenterX))
case .left:
self.titleEdgeInsets = UIEdgeInsets(top: 0, left: space / 2, bottom: 0, right: -space / 2)
self.imageEdgeInsets = UIEdgeInsets(top: 0, left: -space / 2, bottom: 0, right: space)
case .bottom:
self.titleEdgeInsets = UIEdgeInsets(top: -(imageHeight / 2 + space / 2),
left: -(titleCenterX - buttonCenterX),
bottom: imageHeight / 2 + space / 2,
right: titleCenterX - buttonCenterX)
self.imageEdgeInsets = UIEdgeInsets(top: titleHeight / 2 + space / 2,
left: buttonCenterX - imageCenterX,
bottom: -(titleHeight / 2 + space / 2),
right: -(buttonCenterX - imageCenterX))
case .right:
self.titleEdgeInsets = UIEdgeInsets(top: 0, left: -(imageWidth + space / 2),
bottom: 0, right: imageWidth + space / 2)
self.imageEdgeInsets = UIEdgeInsets(top: 0, left: titleWidth + space / 2,
bottom: 0, right: -(titleWidth + space / 2))
}
}

}

38 changes: 38 additions & 0 deletions iOS/Example/App/Main/IMManager.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
//
// IMManager.swift
// TUILiveKitApp
//
// Created by krabyu on 2024/6/19.
//

import Foundation
import ImSDK_Plus

typealias onSuccess = () -> Void
typealias onError = (Int,String) -> Void
class IMManager {
func getUserFollowInfo(userId: String, onSuccess: onSuccess? = nil, onError: onError? = nil) {
V2TIMManager.sharedInstance().getUserFollowInfo([userId], succ: { followInfo in
guard let followInfo = followInfo?.first else { return}
SettingsConfig.share.fansCount = Int(followInfo.followersCount)
SettingsConfig.share.followCount = Int(followInfo.followingCount)
onSuccess?()
}, fail: { code, message in
debugPrint("getUserFollowInfo onError, code:\(code), message:\(String(describing: message))")
onError?(Int(code), message ?? "")
})
}

func changeUserName(newName name: String, onSuccess: onSuccess? = nil, onError: onError? = nil) {
let userFullInfo = V2TIMUserFullInfo()
userFullInfo.nickName = name
V2TIMManager.sharedInstance().setSelfInfo(userFullInfo, succ: { [weak self] in
guard let self = self else { return }
SettingsConfig.share.name = name
onSuccess?()
}, fail: { code, message in
debugPrint("changeUserName onError, code:\(code), message:\(String(describing: message))")
onError?(Int(code), message ?? "")
})
}
}
Loading

0 comments on commit 05042c8

Please sign in to comment.