mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2026-01-03 19:54:31 +00:00
Various fixes
This commit is contained in:
@@ -1602,7 +1602,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
privacy: EngineStoryPrivacy(base: .everyone, additionallyIncludePeers: []),
|
||||
timeout: 86400,
|
||||
isForwardingDisabled: false,
|
||||
pin: false
|
||||
pin: true
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)))
|
||||
|
||||
Reference in New Issue
Block a user