## 新功能 ### 视频时长放宽(Feature 5) - LivePhotoCore: targetDuration 从固定 0.917 秒改为动态计算(0.5-5.0 秒) - LivePhotoCore: keyFrameTime 按比例映射到目标视频时长 - EditorView: slider 上限从 1.5 秒提升至 5.0 秒 - EditorView: 超过 2 秒显示壁纸兼容性提示,超过 3 秒显示分享截断提示 ### 自定义封面帧(Feature 4) - ExportParams: 新增 coverImageURL 字段 - EditorView: 封面帧区域增加 PhotosPicker 从相册导入照片作为封面 - AppState: coverImageURL 传递到 LivePhotoWorkflow - EditorView: onDisappear 时清理临时封面文件,避免磁盘泄漏 ### 收藏/模板预设(Feature 6) - 新增 PresetManager.swift: EditingPreset 模型 + 预设管理器 - 支持保存/加载/删除预设,最多 10 个 - UserDefaults + iCloud KV Store 双重持久化 - EditorView: 预设保存/加载 UI + 空状态 ContentUnavailableView ### iCloud 同步(Feature 7) - RecentWorksManager: 新增 NSUbiquitousKeyValueStore 同步 - PresetManager: 同步支持 iCloud KV Store - 合并策略:按 ID 去重,保留最新记录,限制条数上限 ## Bug 修复 ### P0 级 - ResultView: Live Photo 预览比例从固定值改为动态计算 aspectRatio - EditorView: 修复本地化字符串拼接问题(使用 String(localized:) 替代硬编码) ### P1 级 - EditorView: 预设列表空状态显示 ContentUnavailableView - ProcessingView: 进度环与百分比文本动画同步(统一 overallProgress 计算) ### P2 级 - EditorView: 添加触觉反馈(比例切换、生成按钮、预设保存、封面导入) - HomeView: 删除作品触觉反馈 + 入场动画优化 - ProcessingView: 脉冲动画背景尺寸微调(160-175pt) - LaunchScreen: 品牌启动画面(App Icon + 标题 + 副标题) ## 本地化 - 新增约 25 个本地化 key,覆盖 8 种语言 (zh-Hans, zh-Hant, en, ja, ko, es, fr, ar) - 包含:预设管理、封面导入、时长提示、删除确认、 空状态、诊断建议等全部新增 UI 文案 ## 改动文件(16 个) - Sources/LivePhotoCore/LivePhotoCore.swift — 动态时长 + coverImageURL - to-live-photo/AppState.swift — coverImageURL 传递 - to-live-photo/PresetManager.swift — 新增预设管理器 - to-live-photo/RecentWorksManager.swift — iCloud 同步 - to-live-photo/DesignSystem.swift — 新增设计令牌 - to-live-photo/Localizable.xcstrings — 25+ 本地化 key - to-live-photo/Views/EditorView.swift — 4 项新功能 UI - to-live-photo/Views/HomeView.swift — 删除作品 + 触觉反馈 - to-live-photo/Views/ProcessingView.swift — 进度环动画修复 - to-live-photo/Views/ResultView.swift — 预览比例修复 + Live Photo 预览 - to-live-photo/Base.lproj/LaunchScreen.storyboard — 品牌启动画面 - to-live-photo/Assets.xcassets/Launch*.colorset — 启动画面颜色资源 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
68 lines
5.5 KiB
XML
68 lines
5.5 KiB
XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
|
<dependencies>
|
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23484"/>
|
|
<capability name="Named colors" minToolsVersion="9.0"/>
|
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
</dependencies>
|
|
<scenes>
|
|
<!--View Controller-->
|
|
<scene sceneID="EHf-IW-A2E">
|
|
<objects>
|
|
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
|
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
|
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
|
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
<subviews>
|
|
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" image="AppIcon" translatesAutoresizingMaskIntoConstraints="NO" id="aIc-Kp-9xR">
|
|
<rect key="frame" x="136.5" y="233" width="120" height="120"/>
|
|
<constraints>
|
|
<constraint firstAttribute="width" constant="120" id="wCn-4s-Hx1"/>
|
|
<constraint firstAttribute="height" constant="120" id="hGt-7r-Qz2"/>
|
|
</constraints>
|
|
</imageView>
|
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Live Photo Studio" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb">
|
|
<rect key="frame" x="74" y="406" width="245.66666666666666" height="29"/>
|
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="24"/>
|
|
<color key="textColor" name="LaunchAccent"/>
|
|
<nil key="highlightedColor"/>
|
|
</label>
|
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="视频一键转动态壁纸" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MHt-Pj-7nA">
|
|
<rect key="frame" x="123" y="443" width="148" height="17"/>
|
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
|
<color key="textColor" name="LaunchSubtitle"/>
|
|
<nil key="highlightedColor"/>
|
|
</label>
|
|
</subviews>
|
|
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
|
<color key="backgroundColor" name="LaunchBackground"/>
|
|
<constraints>
|
|
<constraint firstItem="aIc-Kp-9xR" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="cXi-3p-Lm7"/>
|
|
<constraint firstItem="GJd-Yh-RWb" firstAttribute="top" secondItem="aIc-Kp-9xR" secondAttribute="bottom" constant="24" id="tNr-8k-Vw3"/>
|
|
<constraint firstItem="GJd-Yh-RWb" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="5fK-s1-LcA"/>
|
|
<constraint firstItem="GJd-Yh-RWb" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" constant="72" id="8bR-Xa-2gP"/>
|
|
<constraint firstItem="MHt-Pj-7nA" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="Kd4-2s-QnT"/>
|
|
<constraint firstItem="MHt-Pj-7nA" firstAttribute="top" secondItem="GJd-Yh-RWb" secondAttribute="bottom" constant="8" id="Rne-oP-87k"/>
|
|
</constraints>
|
|
</view>
|
|
</viewController>
|
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
|
</objects>
|
|
<point key="canvasLocation" x="53" y="375"/>
|
|
</scene>
|
|
</scenes>
|
|
<resources>
|
|
<image name="AppIcon" width="120" height="120"/>
|
|
<namedColor name="LaunchAccent">
|
|
<color red="0.38823529411764707" green="0.40000000000000002" blue="0.94509803921568625" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
|
</namedColor>
|
|
<namedColor name="LaunchBackground">
|
|
<color red="0.94117647058823528" green="0.94117647058823528" blue="0.95294117647058818" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
|
</namedColor>
|
|
<namedColor name="LaunchSubtitle">
|
|
<color red="0.41960784313725491" green="0.41960784313725491" blue="0.48235294117647054" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
|
</namedColor>
|
|
</resources>
|
|
</document>
|