mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-28 23:08:36 +08:00
fix(ImagePreviewer): 修复连续旋转时角度倒转与来回摆动
This commit is contained in:
@@ -2,6 +2,10 @@
|
||||
|
||||
本文档记录 ImagePreviewer 控件级设计、API、主题契约、Token 和实现结构的变化。它不替代仓库根目录 `CHANGELOG.md`,也不作为正式版本发布说明。
|
||||
|
||||
## 2026-10-21
|
||||
|
||||
- 修复快速连续点击旋转时图片角度倒转、来回摆动的问题:`Scale=1` 时不再向 `RenderTransform` 写入无意义的 Scale 操作,避免 Avalonia 的 TransformOperations 插值在动画重定向后退化为矩阵分解并归一化旋转角。
|
||||
|
||||
## 2026-10-17
|
||||
|
||||
- 新增 `IsWheelZoomEnabled=true`,只控制滚轮;统一滚轮刻度、指针锚点、拖拽平移、双击与捏合缩放,运行时缩放范围变化立即钳制比例和刷新按钮。
|
||||
|
||||
@@ -882,8 +882,17 @@ internal class ImageViewer : TemplatedControl, IMotionAwareControl
|
||||
|
||||
private void GenerateImageRenderTransform()
|
||||
{
|
||||
var builder = TransformOperations.CreateBuilder(2);
|
||||
builder.AppendScale(ImageScaleX, ImageScaleY);
|
||||
// Avalonia's TransformOperations interpolator rewrites a no-op scale operation
|
||||
// to Identity during the animation. A retargeted transition then sees mismatched
|
||||
// operation types, falls back to matrix decomposition and normalizes the
|
||||
// rotation angle, which makes repeated rotate clicks spin backwards.
|
||||
var hasScale = !MathUtils.AreClose(ImageScaleX, 1.0) ||
|
||||
!MathUtils.AreClose(ImageScaleY, 1.0);
|
||||
var builder = TransformOperations.CreateBuilder(hasScale ? 2 : 1);
|
||||
if (hasScale)
|
||||
{
|
||||
builder.AppendScale(ImageScaleX, ImageScaleY);
|
||||
}
|
||||
builder.AppendRotate(ImageRotate);
|
||||
ImageRenderTransform = builder.Build();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user