mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
Various fixes
This commit is contained in:
parent
56795dd1c4
commit
58c78a103d
@ -33,7 +33,7 @@ final class CameraDevice {
|
|||||||
self.position = position
|
self.position = position
|
||||||
|
|
||||||
var selectedDevice: AVCaptureDevice?
|
var selectedDevice: AVCaptureDevice?
|
||||||
if #available(iOS 13.0, *) {
|
if #available(iOS 13.0, *), position != .front {
|
||||||
if let device = AVCaptureDevice.default(.builtInTripleCamera, for: .video, position: position) {
|
if let device = AVCaptureDevice.default(.builtInTripleCamera, for: .video, position: position) {
|
||||||
selectedDevice = device
|
selectedDevice = device
|
||||||
} else if let device = AVCaptureDevice.default(.builtInDualCamera, for: .video, position: position) {
|
} else if let device = AVCaptureDevice.default(.builtInDualCamera, for: .video, position: position) {
|
||||||
|
@ -98,7 +98,7 @@ final class DrawingBubbleEntityView: DrawingEntityView {
|
|||||||
override func updateSelectionView() {
|
override func updateSelectionView() {
|
||||||
super.updateSelectionView()
|
super.updateSelectionView()
|
||||||
|
|
||||||
guard let selectionView = self.selectionView as? DrawingBubbleEntititySelectionView else {
|
guard let selectionView = self.selectionView as? DrawingBubbleEntitySelectionView else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ final class DrawingBubbleEntityView: DrawingEntityView {
|
|||||||
if let selectionView = self.selectionView {
|
if let selectionView = self.selectionView {
|
||||||
return selectionView
|
return selectionView
|
||||||
}
|
}
|
||||||
let selectionView = DrawingBubbleEntititySelectionView()
|
let selectionView = DrawingBubbleEntitySelectionView()
|
||||||
selectionView.entityView = self
|
selectionView.entityView = self
|
||||||
return selectionView
|
return selectionView
|
||||||
}
|
}
|
||||||
@ -125,7 +125,7 @@ final class DrawingBubbleEntityView: DrawingEntityView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final class DrawingBubbleEntititySelectionView: DrawingEntitySelectionView, UIGestureRecognizerDelegate {
|
final class DrawingBubbleEntitySelectionView: DrawingEntitySelectionView {
|
||||||
private let leftHandle = SimpleShapeLayer()
|
private let leftHandle = SimpleShapeLayer()
|
||||||
private let topLeftHandle = SimpleShapeLayer()
|
private let topLeftHandle = SimpleShapeLayer()
|
||||||
private let topHandle = SimpleShapeLayer()
|
private let topHandle = SimpleShapeLayer()
|
||||||
@ -135,9 +135,7 @@ final class DrawingBubbleEntititySelectionView: DrawingEntitySelectionView, UIGe
|
|||||||
private let bottomHandle = SimpleShapeLayer()
|
private let bottomHandle = SimpleShapeLayer()
|
||||||
private let bottomRightHandle = SimpleShapeLayer()
|
private let bottomRightHandle = SimpleShapeLayer()
|
||||||
private let tailHandle = SimpleShapeLayer()
|
private let tailHandle = SimpleShapeLayer()
|
||||||
|
|
||||||
private var panGestureRecognizer: UIPanGestureRecognizer!
|
|
||||||
|
|
||||||
override init(frame: CGRect) {
|
override init(frame: CGRect) {
|
||||||
let handleBounds = CGRect(origin: .zero, size: entitySelectionViewHandleSize)
|
let handleBounds = CGRect(origin: .zero, size: entitySelectionViewHandleSize)
|
||||||
let handles = [
|
let handles = [
|
||||||
@ -170,12 +168,7 @@ final class DrawingBubbleEntititySelectionView: DrawingEntitySelectionView, UIGe
|
|||||||
|
|
||||||
self.layer.addSublayer(handle)
|
self.layer.addSublayer(handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(_:)))
|
|
||||||
panGestureRecognizer.delegate = self
|
|
||||||
self.addGestureRecognizer(panGestureRecognizer)
|
|
||||||
self.panGestureRecognizer = panGestureRecognizer
|
|
||||||
|
|
||||||
self.snapTool.onSnapUpdated = { [weak self] type, snapped in
|
self.snapTool.onSnapUpdated = { [weak self] type, snapped in
|
||||||
if let self, let entityView = self.entityView {
|
if let self, let entityView = self.entityView {
|
||||||
entityView.onSnapUpdated(type, snapped)
|
entityView.onSnapUpdated(type, snapped)
|
||||||
@ -196,15 +189,11 @@ final class DrawingBubbleEntititySelectionView: DrawingEntitySelectionView, UIGe
|
|||||||
override var selectionInset: CGFloat {
|
override var selectionInset: CGFloat {
|
||||||
return 5.5
|
return 5.5
|
||||||
}
|
}
|
||||||
|
|
||||||
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
private let snapTool = DrawingEntitySnapTool()
|
private let snapTool = DrawingEntitySnapTool()
|
||||||
|
|
||||||
private var currentHandle: CALayer?
|
private var currentHandle: CALayer?
|
||||||
@objc private func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
override func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
||||||
guard let entityView = self.entityView as? DrawingBubbleEntityView, let entity = entityView.entity as? DrawingBubbleEntity else {
|
guard let entityView = self.entityView as? DrawingBubbleEntityView, let entity = entityView.entity as? DrawingBubbleEntity else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -235,6 +224,12 @@ final class DrawingBubbleEntititySelectionView: DrawingEntitySelectionView, UIGe
|
|||||||
|
|
||||||
let minimumSize = entityView.minimumSize
|
let minimumSize = entityView.minimumSize
|
||||||
|
|
||||||
|
if self.currentHandle != nil && self.currentHandle !== self.layer {
|
||||||
|
if gestureRecognizer.numberOfTouches > 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if self.currentHandle === self.leftHandle {
|
if self.currentHandle === self.leftHandle {
|
||||||
updatedSize.width = max(minimumSize.width, updatedSize.width - delta.x)
|
updatedSize.width = max(minimumSize.width, updatedSize.width - delta.x)
|
||||||
updatedPosition.x -= delta.x * -0.5
|
updatedPosition.x -= delta.x * -0.5
|
||||||
@ -392,8 +387,4 @@ final class DrawingBubbleEntititySelectionView: DrawingEntitySelectionView, UIGe
|
|||||||
let selectionScale = (self.bounds.width - inset * 2.0) / (max(0.001, entity.size.width))
|
let selectionScale = (self.bounds.width - inset * 2.0) / (max(0.001, entity.size.width))
|
||||||
self.tailHandle.position = CGPoint(x: inset + (self.bounds.width - inset * 2.0) * entity.tailPosition.x, y: self.bounds.height - inset + entity.tailPosition.y * selectionScale)
|
self.tailHandle.position = CGPoint(x: inset + (self.bounds.width - inset * 2.0) * entity.tailPosition.x, y: self.bounds.height - inset + entity.tailPosition.y * selectionScale)
|
||||||
}
|
}
|
||||||
|
|
||||||
var isTracking: Bool {
|
|
||||||
return gestureIsTracking(self.panGestureRecognizer)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -338,14 +338,15 @@ public final class DrawingEntitiesView: UIView, TGPhotoDrawingEntitiesView {
|
|||||||
guard let self else {
|
guard let self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let transition = ContainedViewLayoutTransition.animated(duration: 0.2, curve: .easeInOut)
|
|
||||||
if snapped {
|
if snapped {
|
||||||
|
let transition = ContainedViewLayoutTransition.animated(duration: 0.2, curve: .easeInOut)
|
||||||
self.insertSubview(snapView, belowSubview: view)
|
self.insertSubview(snapView, belowSubview: view)
|
||||||
if snapView.alpha < 1.0 {
|
if snapView.alpha < 1.0 {
|
||||||
self.hapticFeedback.impact(.light)
|
self.hapticFeedback.impact(.light)
|
||||||
}
|
}
|
||||||
transition.updateAlpha(layer: snapView.layer, alpha: 1.0)
|
transition.updateAlpha(layer: snapView.layer, alpha: 1.0)
|
||||||
} else {
|
} else {
|
||||||
|
let transition = ContainedViewLayoutTransition.animated(duration: 0.4, curve: .easeInOut)
|
||||||
transition.updateAlpha(layer: snapView.layer, alpha: 0.0)
|
transition.updateAlpha(layer: snapView.layer, alpha: 0.0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -373,8 +374,8 @@ public final class DrawingEntitiesView: UIView, TGPhotoDrawingEntitiesView {
|
|||||||
processSnap(snapped, self.bottomEdgeView)
|
processSnap(snapped, self.bottomEdgeView)
|
||||||
self.edgePreviewUpdated(snapped)
|
self.edgePreviewUpdated(snapped)
|
||||||
case let .rotation(angle):
|
case let .rotation(angle):
|
||||||
let transition = ContainedViewLayoutTransition.animated(duration: 0.2, curve: .easeInOut)
|
|
||||||
if let angle, let view {
|
if let angle, let view {
|
||||||
|
let transition = ContainedViewLayoutTransition.animated(duration: 0.2, curve: .easeInOut)
|
||||||
self.layer.insertSublayer(self.angleLayer, below: view.layer)
|
self.layer.insertSublayer(self.angleLayer, below: view.layer)
|
||||||
self.angleLayer.transform = CATransform3DMakeRotation(angle, 0.0, 0.0, 1.0)
|
self.angleLayer.transform = CATransform3DMakeRotation(angle, 0.0, 0.0, 1.0)
|
||||||
if self.angleLayer.opacity < 1.0 {
|
if self.angleLayer.opacity < 1.0 {
|
||||||
@ -383,6 +384,7 @@ public final class DrawingEntitiesView: UIView, TGPhotoDrawingEntitiesView {
|
|||||||
transition.updateAlpha(layer: self.angleLayer, alpha: 1.0)
|
transition.updateAlpha(layer: self.angleLayer, alpha: 1.0)
|
||||||
self.angleLayer.isHidden = isMediaEntity
|
self.angleLayer.isHidden = isMediaEntity
|
||||||
} else {
|
} else {
|
||||||
|
let transition = ContainedViewLayoutTransition.animated(duration: 0.4, curve: .easeInOut)
|
||||||
transition.updateAlpha(layer: self.angleLayer, alpha: 0.0)
|
transition.updateAlpha(layer: self.angleLayer, alpha: 0.0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -653,8 +655,18 @@ public final class DrawingEntitiesView: UIView, TGPhotoDrawingEntitiesView {
|
|||||||
return self.selectedEntityView != nil
|
return self.selectedEntityView != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public var isEditingText: Bool {
|
||||||
|
if let entityView = self.selectedEntityView as? DrawingTextEntityView, entityView.isEditing {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
public func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
||||||
if !self.hasSelection, let mediaEntityView = self.subviews.first(where: { $0 is DrawingEntityMediaView }) as? DrawingEntityMediaView {
|
if let selectedEntityView = self.selectedEntityView, let selectionView = selectedEntityView.selectionView {
|
||||||
|
selectionView.handlePan(gestureRecognizer)
|
||||||
|
} else if let mediaEntityView = self.subviews.first(where: { $0 is DrawingEntityMediaView }) as? DrawingEntityMediaView {
|
||||||
mediaEntityView.handlePan(gestureRecognizer)
|
mediaEntityView.handlePan(gestureRecognizer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -795,7 +807,7 @@ public class DrawingEntityView: UIView {
|
|||||||
|
|
||||||
let entitySelectionViewHandleSize = CGSize(width: 44.0, height: 44.0)
|
let entitySelectionViewHandleSize = CGSize(width: 44.0, height: 44.0)
|
||||||
public class DrawingEntitySelectionView: UIView {
|
public class DrawingEntitySelectionView: UIView {
|
||||||
weak var entityView: DrawingEntityView?
|
public weak var entityView: DrawingEntityView?
|
||||||
|
|
||||||
var tapped: () -> Void = { }
|
var tapped: () -> Void = { }
|
||||||
|
|
||||||
@ -818,6 +830,10 @@ public class DrawingEntitySelectionView: UIView {
|
|||||||
@objc func handleRotate(_ gestureRecognizer: UIRotationGestureRecognizer) {
|
@objc func handleRotate(_ gestureRecognizer: UIRotationGestureRecognizer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
var selectionInset: CGFloat {
|
var selectionInset: CGFloat {
|
||||||
return 0.0
|
return 0.0
|
||||||
}
|
}
|
||||||
|
@ -136,11 +136,7 @@ final class DrawingSimpleShapeEntityView: DrawingEntityView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func gestureIsTracking(_ gestureRecognizer: UIPanGestureRecognizer) -> Bool {
|
final class DrawingSimpleShapeEntititySelectionView: DrawingEntitySelectionView {
|
||||||
return [.began, .changed].contains(gestureRecognizer.state)
|
|
||||||
}
|
|
||||||
|
|
||||||
final class DrawingSimpleShapeEntititySelectionView: DrawingEntitySelectionView, UIGestureRecognizerDelegate {
|
|
||||||
private let leftHandle = SimpleShapeLayer()
|
private let leftHandle = SimpleShapeLayer()
|
||||||
private let topLeftHandle = SimpleShapeLayer()
|
private let topLeftHandle = SimpleShapeLayer()
|
||||||
private let topHandle = SimpleShapeLayer()
|
private let topHandle = SimpleShapeLayer()
|
||||||
@ -150,8 +146,7 @@ final class DrawingSimpleShapeEntititySelectionView: DrawingEntitySelectionView,
|
|||||||
private let bottomHandle = SimpleShapeLayer()
|
private let bottomHandle = SimpleShapeLayer()
|
||||||
private let bottomRightHandle = SimpleShapeLayer()
|
private let bottomRightHandle = SimpleShapeLayer()
|
||||||
|
|
||||||
private var panGestureRecognizer: UIPanGestureRecognizer!
|
|
||||||
|
|
||||||
override init(frame: CGRect) {
|
override init(frame: CGRect) {
|
||||||
let handleBounds = CGRect(origin: .zero, size: entitySelectionViewHandleSize)
|
let handleBounds = CGRect(origin: .zero, size: entitySelectionViewHandleSize)
|
||||||
let handles = [
|
let handles = [
|
||||||
@ -179,11 +174,6 @@ final class DrawingSimpleShapeEntititySelectionView: DrawingEntitySelectionView,
|
|||||||
|
|
||||||
self.layer.addSublayer(handle)
|
self.layer.addSublayer(handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(_:)))
|
|
||||||
panGestureRecognizer.delegate = self
|
|
||||||
self.addGestureRecognizer(panGestureRecognizer)
|
|
||||||
self.panGestureRecognizer = panGestureRecognizer
|
|
||||||
|
|
||||||
self.snapTool.onSnapUpdated = { [weak self] type, snapped in
|
self.snapTool.onSnapUpdated = { [weak self] type, snapped in
|
||||||
if let self, let entityView = self.entityView {
|
if let self, let entityView = self.entityView {
|
||||||
@ -206,14 +196,10 @@ final class DrawingSimpleShapeEntititySelectionView: DrawingEntitySelectionView,
|
|||||||
return 5.5
|
return 5.5
|
||||||
}
|
}
|
||||||
|
|
||||||
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
private let snapTool = DrawingEntitySnapTool()
|
private let snapTool = DrawingEntitySnapTool()
|
||||||
|
|
||||||
private var currentHandle: CALayer?
|
private var currentHandle: CALayer?
|
||||||
@objc private func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
override func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
||||||
guard let entityView = self.entityView as? DrawingSimpleShapeEntityView, let entity = entityView.entity as? DrawingSimpleShapeEntity else {
|
guard let entityView = self.entityView as? DrawingSimpleShapeEntityView, let entity = entityView.entity as? DrawingSimpleShapeEntity else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -244,6 +230,12 @@ final class DrawingSimpleShapeEntititySelectionView: DrawingEntitySelectionView,
|
|||||||
|
|
||||||
let minimumSize = entityView.minimumSize
|
let minimumSize = entityView.minimumSize
|
||||||
|
|
||||||
|
if self.currentHandle != nil && self.currentHandle !== self.layer {
|
||||||
|
if gestureRecognizer.numberOfTouches > 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if self.currentHandle === self.leftHandle {
|
if self.currentHandle === self.leftHandle {
|
||||||
let deltaX = delta.x * cos(entity.rotation)
|
let deltaX = delta.x * cos(entity.rotation)
|
||||||
let deltaY = delta.x * sin(entity.rotation)
|
let deltaY = delta.x * sin(entity.rotation)
|
||||||
@ -437,8 +429,4 @@ final class DrawingSimpleShapeEntititySelectionView: DrawingEntitySelectionView,
|
|||||||
self.bottomHandle.position = CGPoint(x: self.bounds.midX, y: self.bounds.maxY - inset)
|
self.bottomHandle.position = CGPoint(x: self.bounds.midX, y: self.bounds.maxY - inset)
|
||||||
self.bottomRightHandle.position = CGPoint(x: self.bounds.maxX - inset, y: self.bounds.maxY - inset)
|
self.bottomRightHandle.position = CGPoint(x: self.bounds.maxX - inset, y: self.bounds.maxY - inset)
|
||||||
}
|
}
|
||||||
|
|
||||||
var isTracking: Bool {
|
|
||||||
return gestureIsTracking(self.panGestureRecognizer)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -401,13 +401,11 @@ public final class DrawingStickerEntityView: DrawingEntityView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final class DrawingStickerEntititySelectionView: DrawingEntitySelectionView, UIGestureRecognizerDelegate {
|
final class DrawingStickerEntititySelectionView: DrawingEntitySelectionView {
|
||||||
private let border = SimpleShapeLayer()
|
private let border = SimpleShapeLayer()
|
||||||
private let leftHandle = SimpleShapeLayer()
|
private let leftHandle = SimpleShapeLayer()
|
||||||
private let rightHandle = SimpleShapeLayer()
|
private let rightHandle = SimpleShapeLayer()
|
||||||
|
|
||||||
private var panGestureRecognizer: UIPanGestureRecognizer!
|
|
||||||
|
|
||||||
override init(frame: CGRect) {
|
override init(frame: CGRect) {
|
||||||
let handleBounds = CGRect(origin: .zero, size: entitySelectionViewHandleSize)
|
let handleBounds = CGRect(origin: .zero, size: entitySelectionViewHandleSize)
|
||||||
let handles = [
|
let handles = [
|
||||||
@ -438,12 +436,7 @@ final class DrawingStickerEntititySelectionView: DrawingEntitySelectionView, UIG
|
|||||||
|
|
||||||
self.layer.addSublayer(handle)
|
self.layer.addSublayer(handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(_:)))
|
|
||||||
panGestureRecognizer.delegate = self
|
|
||||||
self.addGestureRecognizer(panGestureRecognizer)
|
|
||||||
self.panGestureRecognizer = panGestureRecognizer
|
|
||||||
|
|
||||||
self.snapTool.onSnapUpdated = { [weak self] type, snapped in
|
self.snapTool.onSnapUpdated = { [weak self] type, snapped in
|
||||||
if let self, let entityView = self.entityView {
|
if let self, let entityView = self.entityView {
|
||||||
entityView.onSnapUpdated(type, snapped)
|
entityView.onSnapUpdated(type, snapped)
|
||||||
@ -465,14 +458,10 @@ final class DrawingStickerEntititySelectionView: DrawingEntitySelectionView, UIG
|
|||||||
return 18.0
|
return 18.0
|
||||||
}
|
}
|
||||||
|
|
||||||
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
private let snapTool = DrawingEntitySnapTool()
|
private let snapTool = DrawingEntitySnapTool()
|
||||||
|
|
||||||
private var currentHandle: CALayer?
|
private var currentHandle: CALayer?
|
||||||
@objc private func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
override func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
||||||
guard let entityView = self.entityView, let entity = entityView.entity as? DrawingStickerEntity else {
|
guard let entityView = self.entityView, let entity = entityView.entity as? DrawingStickerEntity else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -502,7 +491,11 @@ final class DrawingStickerEntititySelectionView: DrawingEntitySelectionView, UIG
|
|||||||
var updatedPosition = entity.position
|
var updatedPosition = entity.position
|
||||||
var updatedScale = entity.scale
|
var updatedScale = entity.scale
|
||||||
var updatedRotation = entity.rotation
|
var updatedRotation = entity.rotation
|
||||||
|
|
||||||
if self.currentHandle === self.leftHandle || self.currentHandle === self.rightHandle {
|
if self.currentHandle === self.leftHandle || self.currentHandle === self.rightHandle {
|
||||||
|
if gestureRecognizer.numberOfTouches > 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
var deltaX = gestureRecognizer.translation(in: self).x
|
var deltaX = gestureRecognizer.translation(in: self).x
|
||||||
if self.currentHandle === self.leftHandle {
|
if self.currentHandle === self.leftHandle {
|
||||||
deltaX *= -1.0
|
deltaX *= -1.0
|
||||||
@ -549,6 +542,10 @@ final class DrawingStickerEntititySelectionView: DrawingEntitySelectionView, UIG
|
|||||||
guard let entityView = self.entityView, let entity = entityView.entity as? DrawingStickerEntity else {
|
guard let entityView = self.entityView, let entity = entityView.entity as? DrawingStickerEntity else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.currentHandle != nil && self.currentHandle !== self.layer {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
switch gestureRecognizer.state {
|
switch gestureRecognizer.state {
|
||||||
case .began, .changed:
|
case .began, .changed:
|
||||||
@ -572,6 +569,10 @@ final class DrawingStickerEntititySelectionView: DrawingEntitySelectionView, UIG
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.currentHandle != nil && self.currentHandle !== self.layer {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
let velocity = gestureRecognizer.velocity
|
let velocity = gestureRecognizer.velocity
|
||||||
var updatedRotation = entity.rotation
|
var updatedRotation = entity.rotation
|
||||||
var rotation: CGFloat = 0.0
|
var rotation: CGFloat = 0.0
|
||||||
|
@ -699,13 +699,11 @@ public final class DrawingTextEntityView: DrawingEntityView, UITextViewDelegate
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final class DrawingTextEntititySelectionView: DrawingEntitySelectionView, UIGestureRecognizerDelegate {
|
final class DrawingTextEntititySelectionView: DrawingEntitySelectionView {
|
||||||
private let border = SimpleShapeLayer()
|
private let border = SimpleShapeLayer()
|
||||||
private let leftHandle = SimpleShapeLayer()
|
private let leftHandle = SimpleShapeLayer()
|
||||||
private let rightHandle = SimpleShapeLayer()
|
private let rightHandle = SimpleShapeLayer()
|
||||||
|
|
||||||
private var panGestureRecognizer: UIPanGestureRecognizer!
|
|
||||||
|
|
||||||
override init(frame: CGRect) {
|
override init(frame: CGRect) {
|
||||||
let handleBounds = CGRect(origin: .zero, size: entitySelectionViewHandleSize)
|
let handleBounds = CGRect(origin: .zero, size: entitySelectionViewHandleSize)
|
||||||
let handles = [
|
let handles = [
|
||||||
@ -732,12 +730,7 @@ final class DrawingTextEntititySelectionView: DrawingEntitySelectionView, UIGest
|
|||||||
|
|
||||||
self.layer.addSublayer(handle)
|
self.layer.addSublayer(handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(_:)))
|
|
||||||
panGestureRecognizer.delegate = self
|
|
||||||
self.addGestureRecognizer(panGestureRecognizer)
|
|
||||||
self.panGestureRecognizer = panGestureRecognizer
|
|
||||||
|
|
||||||
self.snapTool.onSnapUpdated = { [weak self] type, snapped in
|
self.snapTool.onSnapUpdated = { [weak self] type, snapped in
|
||||||
if let self, let entityView = self.entityView {
|
if let self, let entityView = self.entityView {
|
||||||
entityView.onSnapUpdated(type, snapped)
|
entityView.onSnapUpdated(type, snapped)
|
||||||
@ -769,7 +762,7 @@ final class DrawingTextEntititySelectionView: DrawingEntitySelectionView, UIGest
|
|||||||
private let snapTool = DrawingEntitySnapTool()
|
private let snapTool = DrawingEntitySnapTool()
|
||||||
|
|
||||||
private var currentHandle: CALayer?
|
private var currentHandle: CALayer?
|
||||||
@objc private func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
override func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
||||||
guard let entityView = self.entityView, let entity = entityView.entity as? DrawingTextEntity else {
|
guard let entityView = self.entityView, let entity = entityView.entity as? DrawingTextEntity else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -801,6 +794,9 @@ final class DrawingTextEntititySelectionView: DrawingEntitySelectionView, UIGest
|
|||||||
var updatedRotation = entity.rotation
|
var updatedRotation = entity.rotation
|
||||||
|
|
||||||
if self.currentHandle === self.leftHandle || self.currentHandle === self.rightHandle {
|
if self.currentHandle === self.leftHandle || self.currentHandle === self.rightHandle {
|
||||||
|
if gestureRecognizer.numberOfTouches > 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
var deltaX = gestureRecognizer.translation(in: self).x
|
var deltaX = gestureRecognizer.translation(in: self).x
|
||||||
if self.currentHandle === self.leftHandle {
|
if self.currentHandle === self.leftHandle {
|
||||||
deltaX *= -1.0
|
deltaX *= -1.0
|
||||||
|
@ -123,13 +123,11 @@ private func midPointPositionFor(start: CGPoint, end: CGPoint, length: CGFloat,
|
|||||||
return p2
|
return p2
|
||||||
}
|
}
|
||||||
|
|
||||||
final class DrawingVectorEntititySelectionView: DrawingEntitySelectionView, UIGestureRecognizerDelegate {
|
final class DrawingVectorEntititySelectionView: DrawingEntitySelectionView {
|
||||||
private let startHandle = SimpleShapeLayer()
|
private let startHandle = SimpleShapeLayer()
|
||||||
private let midHandle = SimpleShapeLayer()
|
private let midHandle = SimpleShapeLayer()
|
||||||
private let endHandle = SimpleShapeLayer()
|
private let endHandle = SimpleShapeLayer()
|
||||||
|
|
||||||
private var panGestureRecognizer: UIPanGestureRecognizer!
|
|
||||||
|
|
||||||
var scale: CGFloat = 1.0 {
|
var scale: CGFloat = 1.0 {
|
||||||
didSet {
|
didSet {
|
||||||
self.setNeedsLayout()
|
self.setNeedsLayout()
|
||||||
@ -164,23 +162,14 @@ final class DrawingVectorEntititySelectionView: DrawingEntitySelectionView, UIGe
|
|||||||
self.layer.addSublayer(self.startHandle)
|
self.layer.addSublayer(self.startHandle)
|
||||||
self.layer.addSublayer(self.midHandle)
|
self.layer.addSublayer(self.midHandle)
|
||||||
self.layer.addSublayer(self.endHandle)
|
self.layer.addSublayer(self.endHandle)
|
||||||
|
|
||||||
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(_:)))
|
|
||||||
panGestureRecognizer.delegate = self
|
|
||||||
self.addGestureRecognizer(panGestureRecognizer)
|
|
||||||
self.panGestureRecognizer = panGestureRecognizer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
required init?(coder: NSCoder) {
|
required init?(coder: NSCoder) {
|
||||||
fatalError("init(coder:) has not been implemented")
|
fatalError("init(coder:) has not been implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
private var currentHandle: CALayer?
|
private var currentHandle: CALayer?
|
||||||
@objc private func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
override func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
||||||
guard let entityView = self.entityView as? DrawingVectorEntityView, let entity = entityView.entity as? DrawingVectorEntity else {
|
guard let entityView = self.entityView as? DrawingVectorEntityView, let entity = entityView.entity as? DrawingVectorEntity else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -199,6 +188,10 @@ final class DrawingVectorEntititySelectionView: DrawingEntitySelectionView, UIGe
|
|||||||
}
|
}
|
||||||
self.currentHandle = self.layer
|
self.currentHandle = self.layer
|
||||||
case .changed:
|
case .changed:
|
||||||
|
if gestureRecognizer.numberOfTouches > 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
let delta = gestureRecognizer.translation(in: entityView)
|
let delta = gestureRecognizer.translation(in: entityView)
|
||||||
|
|
||||||
var updatedStart = entity.start
|
var updatedStart = entity.start
|
||||||
@ -287,8 +280,4 @@ final class DrawingVectorEntititySelectionView: DrawingEntitySelectionView, UIGe
|
|||||||
self.endHandle.bounds = bounds
|
self.endHandle.bounds = bounds
|
||||||
self.endHandle.lineWidth = lineWidth
|
self.endHandle.lineWidth = lineWidth
|
||||||
}
|
}
|
||||||
|
|
||||||
var isTracking: Bool {
|
|
||||||
return gestureIsTracking(self.panGestureRecognizer)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,7 @@
|
|||||||
|
|
||||||
@property (nonatomic, copy) void(^ _Nonnull hasSelectionChanged)(bool);
|
@property (nonatomic, copy) void(^ _Nonnull hasSelectionChanged)(bool);
|
||||||
@property (nonatomic, readonly) BOOL hasSelection;
|
@property (nonatomic, readonly) BOOL hasSelection;
|
||||||
|
@property (nonatomic, readonly) BOOL isEditingText;
|
||||||
|
|
||||||
- (void)play;
|
- (void)play;
|
||||||
- (void)pause;
|
- (void)pause;
|
||||||
@ -66,6 +67,7 @@
|
|||||||
- (void)clearSelection;
|
- (void)clearSelection;
|
||||||
- (void)onZoom;
|
- (void)onZoom;
|
||||||
|
|
||||||
|
- (void)handlePan:(UIPanGestureRecognizer * _Nonnull)gestureRecognizer;
|
||||||
- (void)handlePinch:(UIPinchGestureRecognizer * _Nonnull)gestureRecognizer;
|
- (void)handlePinch:(UIPinchGestureRecognizer * _Nonnull)gestureRecognizer;
|
||||||
- (void)handleRotate:(UIRotationGestureRecognizer * _Nonnull)gestureRecognizer;
|
- (void)handleRotate:(UIRotationGestureRecognizer * _Nonnull)gestureRecognizer;
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@ const CGSize TGPhotoPaintingMaxSize = { 1920.0f, 1920.0f };
|
|||||||
TGPaintingWrapperView *_paintingWrapperView;
|
TGPaintingWrapperView *_paintingWrapperView;
|
||||||
UIView<TGPhotoDrawingView> *_drawingView;
|
UIView<TGPhotoDrawingView> *_drawingView;
|
||||||
|
|
||||||
|
UIPanGestureRecognizer *_entityPanGestureRecognizer;
|
||||||
UIPinchGestureRecognizer *_entityPinchGestureRecognizer;
|
UIPinchGestureRecognizer *_entityPinchGestureRecognizer;
|
||||||
UIRotationGestureRecognizer *_entityRotationGestureRecognizer;
|
UIRotationGestureRecognizer *_entityRotationGestureRecognizer;
|
||||||
|
|
||||||
@ -153,6 +154,12 @@ const CGSize TGPhotoPaintingMaxSize = { 1920.0f, 1920.0f };
|
|||||||
// [_scrollContainerView addTarget:self action:@selector(containerPressed) forControlEvents:UIControlEventTouchUpInside];
|
// [_scrollContainerView addTarget:self action:@selector(containerPressed) forControlEvents:UIControlEventTouchUpInside];
|
||||||
[_scrollContentView addSubview:_scrollContainerView];
|
[_scrollContentView addSubview:_scrollContainerView];
|
||||||
|
|
||||||
|
_entityPanGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
|
||||||
|
_entityPanGestureRecognizer.delegate = self;
|
||||||
|
_entityPanGestureRecognizer.minimumNumberOfTouches = 1;
|
||||||
|
_entityPanGestureRecognizer.maximumNumberOfTouches = 2;
|
||||||
|
[_scrollContentView addGestureRecognizer:_entityPanGestureRecognizer];
|
||||||
|
|
||||||
_entityPinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
|
_entityPinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
|
||||||
_entityPinchGestureRecognizer.delegate = self;
|
_entityPinchGestureRecognizer.delegate = self;
|
||||||
[_scrollContentView addGestureRecognizer:_entityPinchGestureRecognizer];
|
[_scrollContentView addGestureRecognizer:_entityPinchGestureRecognizer];
|
||||||
@ -278,6 +285,10 @@ const CGSize TGPhotoPaintingMaxSize = { 1920.0f, 1920.0f };
|
|||||||
[_entitiesView clearSelection];
|
[_entitiesView clearSelection];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)handlePan:(UIPanGestureRecognizer *)gestureRecognizer {
|
||||||
|
[_entitiesView handlePan:gestureRecognizer];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)handlePinch:(UIPinchGestureRecognizer *)gestureRecognizer
|
- (void)handlePinch:(UIPinchGestureRecognizer *)gestureRecognizer
|
||||||
{
|
{
|
||||||
[_entitiesView handlePinch:gestureRecognizer];
|
[_entitiesView handlePinch:gestureRecognizer];
|
||||||
@ -293,6 +304,9 @@ const CGSize TGPhotoPaintingMaxSize = { 1920.0f, 1920.0f };
|
|||||||
if (gestureRecognizer == _entityPinchGestureRecognizer && !_entitiesView.hasSelection) {
|
if (gestureRecognizer == _entityPinchGestureRecognizer && !_entitiesView.hasSelection) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (_entitiesView.isEditingText) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return !_drawingView.isTracking;
|
return !_drawingView.isTracking;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1960,7 +1960,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
|
|
||||||
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(_:)))
|
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(_:)))
|
||||||
panGestureRecognizer.delegate = self
|
panGestureRecognizer.delegate = self
|
||||||
panGestureRecognizer.minimumNumberOfTouches = 2
|
panGestureRecognizer.minimumNumberOfTouches = 1
|
||||||
panGestureRecognizer.maximumNumberOfTouches = 2
|
panGestureRecognizer.maximumNumberOfTouches = 2
|
||||||
self.previewContainerView.addGestureRecognizer(panGestureRecognizer)
|
self.previewContainerView.addGestureRecognizer(panGestureRecognizer)
|
||||||
|
|
||||||
@ -2036,7 +2036,11 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
|
|
||||||
@objc func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
|
@objc func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
|
||||||
if let panRecognizer = gestureRecognizer as? UIPanGestureRecognizer, panRecognizer.minimumNumberOfTouches == 1, panRecognizer.state == .changed {
|
if let panRecognizer = gestureRecognizer as? UIPanGestureRecognizer, panRecognizer.minimumNumberOfTouches == 1, panRecognizer.state == .changed {
|
||||||
return false
|
if otherGestureRecognizer is UIPinchGestureRecognizer || otherGestureRecognizer is UIRotationGestureRecognizer {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
} else if let panRecognizer = otherGestureRecognizer as? UIPanGestureRecognizer, panRecognizer.minimumNumberOfTouches == 1, panRecognizer.state == .changed {
|
} else if let panRecognizer = otherGestureRecognizer as? UIPanGestureRecognizer, panRecognizer.minimumNumberOfTouches == 1, panRecognizer.state == .changed {
|
||||||
return false
|
return false
|
||||||
} else if gestureRecognizer is UITapGestureRecognizer, (otherGestureRecognizer is UIPinchGestureRecognizer || otherGestureRecognizer is UIRotationGestureRecognizer) && otherGestureRecognizer.state == .changed {
|
} else if gestureRecognizer is UITapGestureRecognizer, (otherGestureRecognizer is UIPinchGestureRecognizer || otherGestureRecognizer is UIRotationGestureRecognizer) && otherGestureRecognizer.state == .changed {
|
||||||
@ -2046,6 +2050,9 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
|||||||
}
|
}
|
||||||
|
|
||||||
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
|
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
|
||||||
|
if self.entitiesView.isEditingText {
|
||||||
|
return false
|
||||||
|
}
|
||||||
if gestureRecognizer === self.dismissPanGestureRecognizer {
|
if gestureRecognizer === self.dismissPanGestureRecognizer {
|
||||||
if self.isDisplayingTool || self.entitiesView.hasSelection {
|
if self.isDisplayingTool || self.entitiesView.hasSelection {
|
||||||
return false
|
return false
|
||||||
|
@ -951,20 +951,6 @@ public final class MediaToolsScreen: ViewController {
|
|||||||
|
|
||||||
self.view.disablesInteractiveModalDismiss = true
|
self.view.disablesInteractiveModalDismiss = true
|
||||||
self.view.disablesInteractiveKeyboardGestureRecognizer = true
|
self.view.disablesInteractiveKeyboardGestureRecognizer = true
|
||||||
|
|
||||||
// let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(_:)))
|
|
||||||
// panGestureRecognizer.delegate = self
|
|
||||||
// panGestureRecognizer.minimumNumberOfTouches = 2
|
|
||||||
// panGestureRecognizer.maximumNumberOfTouches = 2
|
|
||||||
// self.previewContainerView.addGestureRecognizer(panGestureRecognizer)
|
|
||||||
//
|
|
||||||
// let pinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(self.handlePinch(_:)))
|
|
||||||
// pinchGestureRecognizer.delegate = self
|
|
||||||
// self.previewContainerView.addGestureRecognizer(pinchGestureRecognizer)
|
|
||||||
//
|
|
||||||
// let rotateGestureRecognizer = UIRotationGestureRecognizer(target: self, action: #selector(self.handleRotate(_:)))
|
|
||||||
// rotateGestureRecognizer.delegate = self
|
|
||||||
// self.previewContainerView.addGestureRecognizer(rotateGestureRecognizer)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
|
@objc func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user