Various fixes

This commit is contained in:
Ilya Laktyushin
2023-08-11 04:03:52 +02:00
parent 9c210d503a
commit 6c5c9fd42e
3 changed files with 44 additions and 33 deletions

View File

@@ -1602,7 +1602,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
privacy: EngineStoryPrivacy(base: .everyone, additionallyIncludePeers: []),
timeout: 86400,
isForwardingDisabled: false,
pin: false
pin: true
)
}

View File

@@ -719,7 +719,7 @@ final class StoryItemContentComponent: Component {
if let current = self.loadingEffectView {
loadingEffectView = current
} else {
loadingEffectView = StoryItemLoadingEffectView(effectAlpha: 0.1, duration: 1.0, hasBorder: true, playOnce: false)
loadingEffectView = StoryItemLoadingEffectView(effectAlpha: 0.1, borderAlpha: 0.2, duration: 1.0, hasCustomBorder: true, playOnce: false)
self.loadingEffectView = loadingEffectView
self.addSubview(loadingEffectView)
}
@@ -743,21 +743,21 @@ final class StoryItemContentComponent: Component {
if let current = self.mediaAreasEffectView {
mediaAreasEffectView = current
} else {
mediaAreasEffectView = StoryItemLoadingEffectView(effectAlpha: 0.25, duration: 1.5, hasBorder: false, playOnce: true)
mediaAreasEffectView = StoryItemLoadingEffectView(effectAlpha: 0.35, borderAlpha: 0.45, gradientWidth: 150.0, duration: 1.5, hasCustomBorder: false, playOnce: true)
self.mediaAreasEffectView = mediaAreasEffectView
self.addSubview(mediaAreasEffectView)
}
mediaAreasEffectView.update(size: availableSize, transition: transition)
let maskView: UIView
if let current = mediaAreasEffectView.mask {
maskView = current
let maskLayer: CALayer
if let current = mediaAreasEffectView.layer.mask {
maskLayer = current
} else {
maskView = UIView(frame: CGRect(origin: .zero, size: availableSize))
mediaAreasEffectView.mask = maskView
maskLayer = CALayer()
mediaAreasEffectView.layer.mask = maskLayer
}
if maskView.subviews.isEmpty {
if (maskLayer.sublayers ?? []).isEmpty {
let referenceSize = availableSize
for mediaArea in component.item.mediaAreas {
guard case .venue = mediaArea else {
@@ -765,15 +765,26 @@ final class StoryItemContentComponent: Component {
}
let size = CGSize(width: mediaArea.coordinates.width / 100.0 * referenceSize.width, height: mediaArea.coordinates.height / 100.0 * referenceSize.height)
let position = CGPoint(x: mediaArea.coordinates.x / 100.0 * referenceSize.width, y: mediaArea.coordinates.y / 100.0 * referenceSize.height)
let cornerRadius = size.height * 0.18
let view = UIView()
view.backgroundColor = .white
view.bounds = CGRect(origin: .zero, size: size)
view.center = position
view.layer.cornerRadius = size.height * 0.18
maskView.addSubview(view)
let layer = CALayer()
layer.backgroundColor = UIColor.white.cgColor
layer.bounds = CGRect(origin: .zero, size: size)
layer.position = position
layer.cornerRadius = cornerRadius
maskLayer.addSublayer(layer)
view.transform = CGAffineTransformMakeRotation(mediaArea.coordinates.rotation * Double.pi / 180.0)
let borderLayer = CAShapeLayer()
borderLayer.strokeColor = UIColor.white.cgColor
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.lineWidth = 2.0
borderLayer.path = CGPath(roundedRect: CGRect(origin: .zero, size: size), cornerWidth: cornerRadius, cornerHeight: cornerRadius, transform: nil)
borderLayer.bounds = CGRect(origin: .zero, size: size)
borderLayer.position = position
mediaAreasEffectView.borderMaskLayer.addSublayer(borderLayer)
layer.transform = CATransform3DMakeRotation(mediaArea.coordinates.rotation * Double.pi / 180.0, 0.0, 0.0, 1.0)
borderLayer.transform = layer.transform
}
}
} else if let mediaAreasEffectView = self.mediaAreasEffectView {

View File

@@ -5,8 +5,8 @@ import ComponentFlow
import Display
final class StoryItemLoadingEffectView: UIView {
private let effectAlpha: CGFloat
private let duration: Double
private let hasCustomBorder: Bool
private let playOnce: Bool
private let hierarchyTrackingLayer: HierarchyTrackingLayer
@@ -16,18 +16,18 @@ final class StoryItemLoadingEffectView: UIView {
private let borderGradientView: UIImageView
private let borderContainerView: UIView
private let borderMaskLayer: SimpleShapeLayer
let borderMaskLayer: SimpleShapeLayer
private var didPlayOnce = false
init(effectAlpha: CGFloat, duration: Double, hasBorder: Bool, playOnce: Bool) {
init(effectAlpha: CGFloat, borderAlpha: CGFloat, gradientWidth: CGFloat = 200.0, duration: Double, hasCustomBorder: Bool, playOnce: Bool) {
self.hierarchyTrackingLayer = HierarchyTrackingLayer()
self.effectAlpha = effectAlpha
self.duration = duration
self.hasCustomBorder = hasCustomBorder
self.playOnce = playOnce
self.gradientWidth = 200.0
self.gradientWidth = gradientWidth
self.backgroundView = UIImageView()
self.borderGradientView = UIImageView()
@@ -75,15 +75,13 @@ final class StoryItemLoadingEffectView: UIView {
context.drawLinearGradient(gradient, start: CGPoint(x: 0.0, y: 0.0), end: CGPoint(x: size.width, y: 0.0), options: CGGradientDrawingOptions())
})
}
self.backgroundView.image = generateGradient(self.effectAlpha)
self.backgroundView.image = generateGradient(effectAlpha)
self.addSubview(self.backgroundView)
if hasBorder {
self.borderGradientView.image = generateGradient(self.effectAlpha + 0.1)
self.borderContainerView.addSubview(self.borderGradientView)
self.addSubview(self.borderContainerView)
self.borderContainerView.layer.mask = self.borderMaskLayer
}
self.borderGradientView.image = generateGradient(borderAlpha)
self.borderContainerView.addSubview(self.borderGradientView)
self.addSubview(self.borderContainerView)
self.borderContainerView.layer.mask = self.borderMaskLayer
}
required init?(coder: NSCoder) {
@@ -107,11 +105,13 @@ final class StoryItemLoadingEffectView: UIView {
if self.backgroundView.bounds.size != size {
self.backgroundView.layer.removeAllAnimations()
self.borderMaskLayer.fillColor = nil
self.borderMaskLayer.strokeColor = UIColor.white.cgColor
let lineWidth: CGFloat = 3.0
self.borderMaskLayer.lineWidth = lineWidth
self.borderMaskLayer.path = UIBezierPath(roundedRect: CGRect(origin: CGPoint(), size: size).insetBy(dx: lineWidth * 0.5, dy: lineWidth * 0.5), cornerRadius: 12.0).cgPath
if !self.hasCustomBorder {
self.borderMaskLayer.fillColor = nil
self.borderMaskLayer.strokeColor = UIColor.white.cgColor
let lineWidth: CGFloat = 3.0
self.borderMaskLayer.lineWidth = lineWidth
self.borderMaskLayer.path = UIBezierPath(roundedRect: CGRect(origin: CGPoint(), size: size).insetBy(dx: lineWidth * 0.5, dy: lineWidth * 0.5), cornerRadius: 12.0).cgPath
}
}
transition.setFrame(view: self.backgroundView, frame: CGRect(origin: CGPoint(x: -self.gradientWidth, y: 0.0), size: CGSize(width: self.gradientWidth, height: size.height)))