我有一个自定义segue动画,当将新的视图控制器推入堆栈时发生.然而,当弹出与所述自定义segue一起呈现的视图控制器时,默认导航控制器动画发生(即,当父视图控制器从左边缘在屏幕上翻译时,当前视图控制器向右动画).
所以我的问题是:有没有办法编写一个自定义的pop segue动画,当从视图控制器弹出堆栈时会发生这种情况?
编辑(解决方案):
我最终定义了一个类似于所选答案的自定义segue.在Storyboard中,我将一个自定义segue从子视图控制器拖回到它的父级,给它一个标识符,新写的反向segue作为它的类.是的,我意识到它几乎与模态转换相同.客户要求需要这种疯狂,所以在任何人发表评论之前,要明白我知道在正常情况下不应该这样做.
- (void)perform {
UIViewController *src = (UIViewController *)self.sourceViewController;
UIViewController *dest = (UIViewController *)self.destinationViewController;
[UIView animateWithDuration:0.3 animations:^{
CGRect f = src.view.frame;
f.origin.y = f.size.height;
src.view.frame = f;
} completion:^(BOOL finished){
src.view.alpha = 0;
[src.navigationController popViewControllerAnimated:NO];
}];
}
Run Code Online (Sandbox Code Playgroud) 我有一个UINavigationController作为我在iOS 7和iOS 8上的UIWindow的根视图控制器.从它的一个视图控制器,我提出了一个具有交叉溶解演示风格的全屏模态视图控制器.这个模态视图控制器应该能够旋转到所有方向,并且它工作正常.
问题是当设备以横向方向保持并且模态视图控制器被解除时.呈现模态的视图控制器仅支持纵向方向,并且我已确认UIInterfaceOrientationMaskPortrait返回到-application:supportedInterfaceOrientationsForWindow:.-shouldAutorotate也返回YES.然而,在解除模态之后,呈现视图控制器的方向仍然是风景.在允许模态采取设备方向的同时,如何强制它保持纵向方向?我的代码如下:
应用代表:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
UINavigationController *navigationController = (UINavigationController *)self.deckController.centerController;
NSArray *viewControllers = [navigationController viewControllers];
UIViewController *top = [viewControllers lastObject];
if (top && [top presentedViewController]) {
UIViewController *presented = [top presentedViewController];
if ([presented respondsToSelector:@selector(isDismissing)] && ![(id)presented isDismissing]) {
top = presented;
}
}
return [top supportedInterfaceOrientations];
}
return (UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskLandscapeRight);
}
Run Code Online (Sandbox Code Playgroud)
呈现视图控制器:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
} …Run Code Online (Sandbox Code Playgroud) 我正在使用RestKit来驱动与我的Web服务器的交互.我正在尝试使用路由将一个Event对象POST到服务器并附加一个映像.代码如下:
RKObjectManager *manager = [RKObjectManager sharedManager];
RKObjectMapping *map = [self eventMapping];
manager.serializationMIMEType = RKMIMETypeFormURLEncoded;
map.rootKeyPath = @"event";
[manager.mappingProvider setSerializationMapping:map forClass:[Event class]];
[manager.router routeClass:[Event class] toResourcePath:@"/v1/events.json" forMethod:RKRequestMethodPOST];
[manager postObject:event delegate:self block:^(RKObjectLoader *loader){
RKObjectMapping *serMap = [[[RKObjectManager sharedManager] mappingProvider] serializationMappingForClass:[Event class]];
NSError *error = nil;
NSDictionary *d = [[RKObjectSerializer serializerWithObject:event mapping:serMap] serializedObject:&error];
RKParams *p = [RKParams paramsWithDictionary:d];
[p setData:[event imageData] MIMEType:@"image/jpeg" forParam:@"image"];
loader.params = p;
}];
Run Code Online (Sandbox Code Playgroud)
如果我使用序列化的Event对象创建一个RKParams实例,然后添加图像数据并将其指定为RKObjectLoader的params属性,所有属性都将成为一个大型序列化字符串.必须有一种方法来上传图像而不需要大量的字符串序列化.
我还尝试了一个映射到某个属性的NSData属性,沿途将UIImage转换为NSData,但RestKit抱怨它无法映射.有没有人这样做过?
请允许我先说这是我第一次使用ALAssetsLibrary.我需要访问用户保存的照片库中的最新照片.似乎要做到这一点,我必须创建一个ALAssetsLibrary实例并迭代用户库中的每个项目,然后再选择最后一个图像.这总是最糟糕的情况.是否有更快/更好的方法来解决这个问题?
我正在尝试使用可变高度的UITextView来更改大小以容纳其内容,但是当大小更改动画中的帧发生更改时,UITextView中不会捕获一到两次击键.动画持续时间为0.1秒,通常在您输入相当快的时候只会丢失一个字母.但是,当动画发生时,它在丢失的字母中非常一致.以下动画块发生在textViewDidChange:delegate消息中:
[UIView animateWithDuration:0.1 animations:^{
[textView setFrame:CGRectMake(...)];
}];
Run Code Online (Sandbox Code Playgroud)
我用Google搜索并搜索了SO,但到目前为止还没有出现任何问题.有人遇到过这种情况么?
我正在编写一个多线程应用程序,需要在后台集中上传ALAssetsLibrary中的照片.所以我有一个NSOperation子类,它通过资产的URL找到适当的ALAsset,并将图像添加到上传队列.
在当前ALAsset的上传队列中,我需要从图像中获取元数据,但是我遇到了一个问题:在ALAsset的ALAssetRepresentation上调用它们时,-metadata和-fullResolutionImage方法都不会返回.他们只是无限期地挂在那里.我尝试在LLDB中打印这些方法中的每一个的值,但它挂起了调试器,我最终杀死了Xcode,信号9样式.在后台队列上调用这些方法.
我在iPad 2上测试这些.这是在-assetForURL的成功块中找到ALAsset时添加到上传队列的方法:resultBlock:failureBlock:
- (void)addMediaToUploadQueue:(ALAsset *)media {
@autoreleasepool {
ALAssetRepresentation *defaultRepresentation = [media defaultRepresentation];
CGImageRef fullResolutionImage = [defaultRepresentation fullResolutionImage];
// Return if the user is trying to upload an image which has already been uploaded
CGFloat scale = [defaultRepresentation scale];
UIImageOrientation orientation = [defaultRepresentation orientation];
UIImage *i = [UIImage imageWithCGImage:fullResolutionImage scale:scale orientation:orientation];
if (![self isImageUnique:i]) return;
NSDictionary *imageDictionary = [self dictionaryForAsset:media withImage:i];
dispatch_async(self.background_queue, ^{
NSManagedObjectContext *ctx = [APPDELEGATE createManagedObjectContextForThread];
[ctx setUndoManager:nil];
[ctx performBlock:^{
ImageEntity *newImage = [NSEntityDescription insertNewObjectForEntityForName:@"ImageEntity"
inManagedObjectContext:ctx]; …Run Code Online (Sandbox Code Playgroud) objective-c ×6
ios ×4
iphone ×3
alasset ×1
animation ×1
image ×1
photo ×1
restkit ×1
reverse ×1
rotation ×1
segue ×1
storyboard ×1
typing ×1
uitextview ×1
upload ×1