我正在尝试在两个 SwiftUI 视图之间创建卡片翻转效果。单击原始视图时,它会像翻转卡片一样在 Y 轴上 3D 旋转,并且第二个视图应在制作 90 度后开始可见。
使用.rotation3DEffect()我可以轻松旋转视图,问题是,animation()一旦角度达到 90 度,我不知道如何触发视图更改...
@State var flipped = false
var body: some View {
return VStack{
Group() {
if !self.flipped {
MyView(color: "Blue")
} else {
MyView(color: "Red")
}
}
.animation(.default)
.rotation3DEffect(self.flipped ? Angle(degrees: 90): Angle(degrees: 0), axis: (x: CGFloat(0), y: CGFloat(10), z: CGFloat(0)))
.onTapGesture {
self.flipped.toggle()
}
}
Run Code Online (Sandbox Code Playgroud)
如何实现两个视图之间的这种旋转?
我正在UIViewController我的Storyboard/Interface Builder上工作,其中有一个UICollectionView定义了一个UICollectionViewCell.每当我在这个单元格中更改某些内容时,其所有子视图都会变为空白,从而无法看到任何内容.此外,当我更新约束时,即使我刷新,框架也不会移动,就像整个界面构建器被破坏一样.它只是为了这个UIViewController,有时是另一个.Interface Builder Builds显示来自Pods的警告(我无法帮助它).我没有受到限制.
如果我退出Xcode,清理,重建并重新打开Storyboard,它将恢复到"几乎"正常(意味着并非所有视图都显示正常,但至少我可以看到它们并且它不是完全白色的),直到我切换到另一个文件然后回来.当我回到故事板时将再次空白.有时我必须删除我的DerivedData,并且单元格将显示完美.只有几分钟.
另外,我没有任何约束警告或任何东西.
编辑:我从单元格中的所有视图中删除了所有类,以防我的自定义视图中的某些内容导致这些问题.我的观点主要是实现图层和渐变,所以我认为我可能在做错了IB渲染时做错了.在单元格的顶部有一个UIView我自己制作的习惯,它使用了一个CAGradientLayer.如果我从此视图中删除该类,则该单元格将再次开始显示.但是我无法确定这是什么原因,因为当我离开故事板并回到它上面时,细胞将再次变白.没有把课程放回原位.
EDIT2:我卸载并重新安装了Xcode和cocoapods.更新了播客.创建了一个新的xcworspace.
我正在使用Swift,XCode 9.3,Cocoapods 1.5.0,High Sierre 10.13.4随意询问任何其他细节My Pods(由于swift 4兼容性而产生大量警告):
pod 'FBSDKLoginKit'
pod 'FBSDKCoreKit'
pod 'FSPagerView'
pod 'CropViewController'
pod 'SwiftLint'
pod 'Parse'
pod 'Parse/FacebookUtils'
pod 'ImagePicker'
pod 'XLPagerTabStrip', '~> 8.0'
pod 'Eureka'
Run Code Online (Sandbox Code Playgroud) 我希望location默认情况下隐藏我的架构的字段.我添加了select: false属性,但在选择文档时总是返回...
var userSchema = new mongoose.Schema({
cellphone: {
type: String,
required: true,
unique: true,
},
location: {
'type': {
type: String,
required: true,
enum: ['Point', 'LineString', 'Polygon'],
default: 'Point'
},
coordinates: [Number],
select: false, <-- here
},
});
userSchema.index({location: '2dsphere'});
Run Code Online (Sandbox Code Playgroud)
致电时:
User.find({ }, function(err, result){
console.log(result[0]);
});
输出是:
{
cellphone: '+33656565656',
location: { type: 'Point', coordinates: [Object] } <-- Shouldn't
}
Run Code Online (Sandbox Code Playgroud)
编辑: 解释(感谢@alexmac)
SchemaType select选项必须应用于字段选项而不是类型.在您的示例中,您已定义了复杂类型的Location,并为类型添加了select选项.
我的目标是跟踪出于分析目的而呈现和关闭的路线,如本文所述:https : //medium.com/flutter-community/how-to-track-screen-transitions-in-flutter-with-routeobserver-733984a90dea
我正在推送 aCupertinoPageRoute并向它传递一个实现RouteAwareMixin的小部件。
final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
return CupertinoApp(
...
navigatorObservers: [routeObserver],
}
Run Code Online (Sandbox Code Playgroud)
像这样推:
Navigator.of(context).push(
CupertinoPageRoute(builder: (context) => MyWidget()),
);
Run Code Online (Sandbox Code Playgroud)
小部件
class MyWidget extends StatefulWidget {
MyWidget({Key key}) : super(key: key);
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> with RouteAware {
@override
void didChangeDependencies() {
super.didChangeDependencies();
routeObserver.subscribe(this, ModalRoute.of(context));
}
@override
void dispose() {
routeObserver.unsubscribe(this);
super.dispose();
}
@override
void didPop() {
print('never called');
}
@override
void didPopNext() {
print('never called'); …Run Code Online (Sandbox Code Playgroud) 我正在使用swift 3开发iOS应用程序.
我需要将一个SecKey(用户RSA公钥引用)导出到一个字符串(例如base64),以便通过生成的QRCode共享它.
它还必须以另一种方式工作,因为扫描的其他用户QRCode将能够SecKey从QRCode中提取的字符串重建引用.
我发现很少有教程,但我不明白我需要从SecKey引用中提取什么,我不知道如何将它转换为String.
我是Firestore / Firebase的新手,我正在尝试创建一个新文档,其中一个字段是document reference另一个文档。我已经阅读了Firebase的所有指南和示例,但没有发现任何内容。
同样,当我检索创建的文档时,我将能够访问我添加在其中的引用中的内容。我不知道该怎么做。
这是我尝试创建部分的一些代码
let db = Firestore.firestore()
// Is this how you create a reference ??
let userRef = db.collection("users").document(documentId)
db.collection("publications").document().setData([
"author": userRef,
"content": self.uploadedImagesURLs
]) { err in
if let err = err {
print("Error writing document: \(err)")
} else {
print("Document successfully written!")
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用swift应用CAGradientLayer,并且我希望它从黑色渐变为透明。
我以为,将任何颜色与alpha: 0都会呈现相同的“透明”颜色。事实并非如此。白色与alpha: 0仍然有点白色,红色与alpha: 0仍然有点红色...
我不需要任何色彩,只要透明即可。黑色不那么黑,直到没有颜色为止,例如,您可以完全看到其下方的视图。
gradientLayer.colors = [UIColor(hex: 0x000000, alpha: 0.4).cgColor,
UIColor(hex: 0x6D6D6D, alpha: 0.3).cgColor,
UIColor.white.withAlphaComponent(0.0).cgColor]
gradientLayer.locations = [0.0, 0.3, 1.0]
Run Code Online (Sandbox Code Playgroud)
如果将图层应用于灰色图片,则很容易看到它不是透明的而是白色的:
编辑1:
gradientLayer.frame = self.gradientView.bounds
gradientLayer.masksToBounds = true
gradientLayer.colors = [UIColor.black.withAlphaComponent(1.0).cgColor, UIColor.black.withAlphaComponent(0.0).cgColor]
gradientLayer.locations = [0.0, 1.0]
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.0)
gradientLayer.endPoint = CGPoint(x: 0.0, y: 1.0)
self.gradientView.layer.addSublayer(gradientLayer)
Run Code Online (Sandbox Code Playgroud)
输出:
我正在使用 blocs 和 rxdart。有一些块我不会“按屏幕/小部件”实例化,而是在应用程序中全局实例化,因为我在应用程序会话的整个生命周期中都需要相同的实例。因此,我不会通过关闭流来处理它们。
当我注销用户时,我想确保所有流/主题都已重置。我怎样才能实现这个目标?
这是我有一个简单的块:
class FriendsBloc {
final FriendsRepository _friendsRepository = FriendsRepository();
final BehaviorSubject<FriendsResponse> _friendsSubject = BehaviorSubject<FriendsResponse>();
BehaviorSubject<FriendsResponse> get friends => _friendsSubject;
Future<void> getFriends() async {
try {
FriendsResponse response = await _friendsRepository.getFriends();
_friendsSubject.sink.add(response);
} catch (e) {
_friendsSubject.sink.addError(e);
}
}
dispose() {
_friendsSubject.close();
}
}
final friendsBloc = FriendsBloc();
Run Code Online (Sandbox Code Playgroud) 我刚刚安装Android Studio 4.2.2和Android Studio Preview (Arctic Fox Beta 5)我的苹果的Macbook M1。
创建模拟器 ( arm64) 时,我立即收到错误消息:
AVD Manager: The emulator process for AVD Pixel_4a_API_30 has terminated
Run Code Online (Sandbox Code Playgroud)
然后我转到了 Android Studio 的日志文件(帮助 > 在 Finder 中显示日志),我看到当 Android Studio 尝试运行以下内容时发生错误:
~/Library/Android/sdk/emulator/emulator -netdelay none -netspeed full -no-snapshot-load -avd Pixel_4a_API_30
输出:
emulator: Android emulator version 30.3.5.0 (build_id 7036990) (CL:N/A)
emulator: ERROR: can't find the emulator executable.
Run Code Online (Sandbox Code Playgroud)
尝试了到目前为止我在网上找到的所有可能的解决方案......
android android-studio android-sdk-manager apple-silicon apple-m1
我正在尝试从缓存中读取数据,使用cache.readFragment并订阅更改,就像这样useQuery做一样。我尝试使用useQuerywithfetchPolicy: 'cache-only'但尽管我在缓存中看到我的实体,但数据返回为空。这cache.readFragment正常,但它不订阅,这意味着应用于缓存的任何更改都不会重新触发它。
我怎样才能实现这种行为,并让它在某些内容突变到缓存后立即工作?
// one time read
const data = client.cache.readFragment({
id: client.cache.identify({
__typename: 'Creator',
id: creatorId,
}),
fragment: IS_FOLLOWING_FRAGMENT,
}) as MyCreatorIsFollowing;
Run Code Online (Sandbox Code Playgroud)
// comes back as null although I see it in the cache
const { data } = useQuery(GET_IS_FOLLOW_CREATOR, {
fetchPolicy: 'cache-only',
variables: { id: creatorId },
});
Run Code Online (Sandbox Code Playgroud)