Various fixes

This commit is contained in:
Ilya Laktyushin 2023-07-02 02:23:25 +02:00
parent 56795dd1c4
commit 58c78a103d
11 changed files with 95 additions and 105 deletions

View File

@ -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) {

View File

@ -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)
}
} }

View File

@ -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
} }

View File

@ -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)
}
} }

View File

@ -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

View File

@ -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

View File

@ -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)
}
} }

View File

@ -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;

View File

@ -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;
} }

View File

@ -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

View File

@ -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 {