小编Rav*_*tam的帖子

不能在Objective-C中使用Swift类

我尝试Swift在我的app中集成代码.我的应用程序是写入的Objective-C,我添加了一个Swift类.我做了这里描述的所有事情.但我的问题是Xcode没有创建-Swift.h文件,只有桥接头.所以我创造了它,但它实际上是空的.我可以在Swift中使用我所有的ObjC类,但我不能这样做.我标记了我的快速课程,@objc但没有帮助.我现在能做什么?

编辑:Apple说:"当您将Swift代码导入Objective-C时,您依靠Xcode-generated头文件将这些文件暴露给Objective-C.[...]此标题的名称是您的产品模块名称,然后添加" -Swift.h"."

现在,当我想导入该文件时,它会出错:

    //MainMenu.m

    #import "myProjectModule-Swift.h" //Error: 'myProjectModule-Swift.h' file not found

    @implementation MainMenu
Run Code Online (Sandbox Code Playgroud)

这是我的FBManager.swift文件:

@objc class FBManager: NSObject {

    var descr = "FBManager class"

    init() {
        super.init()
    }

    func desc(){
        println(descr)
    }

    func getSharedGameState() -> GameState{
        return GameState.sharedGameState() //OK! GameState is written in Objective-C and no error here
    }
}
Run Code Online (Sandbox Code Playgroud)

objective-c ios swift

251
推荐指数
12
解决办法
15万
查看次数

UIViewController更喜欢StatusBarHidden无法正常工作

我正在尝试隐藏其中一个视图控制器的状态栏(以模态方式显示).当我呈现视图控制器时,状态栏将被隐藏,然后在被解雇时返回.

我已将以下代码添加到显示的视图控制器中

- (BOOL)prefersStatusBarHidden
{
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

我还将Info.plist文件中的键设置为以下内容:

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这应该是完成这项工作所需的全部内容.

我还使用自定义动画控制器来执行符合UIViewControllerAnimatedTransitioning协议的演示.在animateTransition:实现中,我尝试手动调用prefersStatusBarHidden,然后setNeedsStatusBarAppearanceUpdate确保正在进行调用,但状态栏仍然存在.

任何想法为什么会发生这种情况将不胜感激.我已经搜索过StackOverflow,但似乎没有人遇到过这个问题,所有接受的答案都提到了调用setNeedsStatusBarAppearanceUpdate,我已经在做了.

编辑 - 现在下面的代码似乎按照需要工作

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
{
    if (self.isPresenting) {
        UIView *containerView = [transitionContext containerView];

        UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
        UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

        toViewController.view.frame = containerView.frame;

        [containerView addSubview:toViewController.view];

        // Ask the presented controller whether to display the status bar
        [toViewController setNeedsStatusBarAppearanceUpdate];

        [UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
            toViewController.view.alpha = 1.0f;
            fromViewController.view.alpha = 0.0f;
        } …
Run Code Online (Sandbox Code Playgroud)

objective-c uiviewcontroller ios ios7 ios7-statusbar

43
推荐指数
2
解决办法
4万
查看次数

在哪里确定UIView的大小

简介:UIViewController在初始化该视图时,应该如何知道其UIView实例的大小?

UIView的专用初始化方法是initWithFrame:(CGRect)frame方法.这将为新创建的UIView设置框架.UIViewController's如果请求了视图控制器的视图,则可以从loadView方法调用此方法.UIViewController关于子类化和视图大小的状态文档:

为视图层次结构创建视图时,应始终设置视图的自动调整大小属性.当视图控制器显示在屏幕上时,其根视图通常会调整大小以适应可用空间,可用空间可能会根据窗口的当前方向和状态栏等其他界面元素的存在而变化.

因此,UIViewController实例应该设置这些属性.到目前为止一直很好,UIViewController到目前为止还没有必要知道它的观点有多大.

UIViewController请求a 的视图并且view属性为nil时,将调用视图控制器的loadView方法.现在有一个问题,因为UIView需要初始化,但视图控制器仍然不知道视图应该是多大.你应该初始化那个视图有多大?您在代码中确定视图大小的位置?

您可以使用零rect(CGRectZero)初始化视图:

- (void)loadView {
    self.view = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}
Run Code Online (Sandbox Code Playgroud)

让调用者像这样设置视图框:

UIViewController *viewController = [[MyUIViewController alloc] init];
// next two lines are normally combined, but for clarity they are not now
UIView *view = viewController.view;
view.frame = CGRectMake(0, 0, 200, 200);
Run Code Online (Sandbox Code Playgroud)

这将从视图控制器(viewController.view)请求视图,从而使用loadView方法加载其视图.此loadView方法使用a初始化视图CGRectZero.然后调用者设置其框架(view.frame = ...)

问题是视图上的frame属性设置了两次,如果你的自定义UIView在setFrame方法中进行一些高级布局(例如放置和调整子视图),可能会导致更多的双重工作.您可以通过为UIViewController已经向调用者请求CGRect 的专用初始化方法来阻止这种情况,CGRect将存储在ivar中.在调用loadView方法时,使用此ivar创建视图.

去这儿的好方法是什么?或者设置视图的框架两次(初始化CGRectZero,事后设定),或给予 …

iphone model-view-controller uiviewcontroller uiview

28
推荐指数
1
解决办法
2万
查看次数

iPhone SDK 4 AVFoundation - 如何正确使用captureStillImageAsynchronouslyFromConnection?

我正在尝试使用新AVFoundation framework的iPhone拍摄静态照片.

按下按钮可以调用此方法.我可以听到快门声,但我看不到日志输出.如果我多次调用此方法,相机预览将冻结.

有没有任何教程如何使用captureStillImageAsynchronouslyFromConnection

[[self stillImageOutput] captureStillImageAsynchronouslyFromConnection:
                [[self stillImageOutput].connections objectAtIndex:0]
                     completionHandler:^(CMSampleBufferRef imageDataSampleBuffer,
                            NSError *error) {
                                              NSLog(@"inside");
                            }];
Run Code Online (Sandbox Code Playgroud)
- (void)initCapture {
    AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput 
                                          deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] 
                                          error:nil];

    AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init];

    captureOutput.alwaysDiscardsLateVideoFrames = YES; 

    dispatch_queue_t queue;
    queue = dispatch_queue_create("cameraQueue", NULL);
    [captureOutput setSampleBufferDelegate:self queue:queue];
    dispatch_release(queue);

    NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; 
    NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; 
    NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; 
    [captureOutput setVideoSettings:videoSettings]; 

    self.captureSession = [[AVCaptureSession alloc] init];
    self.captureSession.sessionPreset = AVCaptureSessionPresetLow;

    [self.captureSession addInput:captureInput];
    [self.captureSession addOutput:captureOutput];

    self.prevLayer …

iphone camera avfoundation

21
推荐指数
3
解决办法
3万
查看次数

CoreAnimation - 不透明淡入淡出动画不起作用

我正在尝试创建一个相当简单的CoreAnimation用于AVComposition.我的目标是创建一个CALayer,通过各种子层,淡入淡出标题,然后淡出图像.幻灯片,基本上.这是使用导出到.mov AVAssetWriter.

在WWDC 2011 AVEditDemo的帮助下,我已经能够获得一个标题和图像.问题是它们同时都在屏幕上!

我创建了每个图层的不透明度为0.0.然后我添加了一个CABasicAnimation将它们从0.0淡化为1.0,使用以下代码:

CABasicAnimation *fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimation.fromValue = [NSNumber numberWithFloat:0.0];
fadeInAnimation.toValue = [NSNumber numberWithFloat:1.0];
fadeInAnimation.additive = NO;
fadeInAnimation.removedOnCompletion = YES;
fadeInAnimation.beginTime = 1.0;
fadeInAnimation.duration = 1.0;
fadeInAnimation.fillMode = kCAFillModeForwards;
[titleLayer addAnimation:fadeInAnimation forKey:nil];
Run Code Online (Sandbox Code Playgroud)

问题似乎是'beginTime'属性."1.0"意味着延迟,因此它在动画开始后1秒开始.但是,它会立即出现在屏幕上.淡出动画

对于淡出,此代码的反向只是将fromValue更改为1.0,将toValue更改为0.0.它的开始时间为4.0,完美运行.

我正在使用以下内容来创建animatedTitleLayer:

CATextLayer *titleLayer = [CATextLayer layer];
titleLayer.string =self.album.title;
titleLayer.font = @"Helvetica";
titleLayer.fontSize = videoSize.height / 6;
titleLayer.alignmentMode = kCAAlignmentCenter;
titleLayer.bounds = CGRectMake(0, 0, videoSize.width, videoSize.height / 6);
titleLayer.foregroundColor = [[UIColor redColor]CGColor];
titleLayer.opacity …
Run Code Online (Sandbox Code Playgroud)

core-animation avfoundation calayer cakeyframeanimation ios

21
推荐指数
3
解决办法
3万
查看次数

使用故事板从xib或其他场景添加子视图

我是iOS和Xcode的新手.我无法弄清楚如何设计一个单独的视图,并使用storyboard将其添加到主UIViewController中.

我做了不同的方法..

  1. 只需从xcode中的右下角窗口抓取一个UI对象,然后将其放在故事板的任何空间区域.但我不能像使用xib那样删除UI对象.
  2. 添加一个新的UIViewController.添加视图到UIViewController.在主ViewController.m中,我UIViewController在viewDidLoad中获取新实例,然后[self.view addSubview:newUIViewController.view].但是我看不到添加的视图.
  3. 我创建了一个新的xib文件.并添加一个视图.我也尝试在主要实例中获取实例ViewController.并且addSubview有了xib的观点.但它也失败了.

是否有正确的方法或任何可行的解决方案?

view storyboard ios

20
推荐指数
1
解决办法
2万
查看次数

iOS - UIBarButtonItem - 后退按钮标题垂直位置未调整

我正在UIBarButtonItem使用我的对象设置自定义字体UIAppearance.这很好,并正确设置字体.但是,我需要调整按钮标题的垂直位置以适应新字体的大小.

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIFont fontWithName:@"Sketch Rockwell" size:12] forKey:UITextAttributeFont] forState:UIControlStateNormal];
[[UIBarButtonItem appearance] setTitlePositionAdjustment:UIOffsetMake(0, 1.5) forBarMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

问题是标题的垂直位置在常规中正确调整UIBarButtonItem,但导航栏上的后退按钮无法调整.我假设我的目标是我的代码中的正确对象,因为它的字体更新,而不是它的标题的垂直位置.

有没有人知道如何直接定位后退按钮?

谢谢

布赖恩

back-button uibarbuttonitem ios

17
推荐指数
1
解决办法
1万
查看次数

访问父视图控制器(自定义)属性

我编写了一个UITabBarController子类(调用MainViewController)并添加了一些实例变量,特别是Venue类型的场所.每个标签都MainViewController需要访问场地变量MainViewController.在第一个选项卡中,一个UIViewController名为的子类HomeViewController,我编写了我的viewDidLoad方法并试图输出到NSLog两个...

NSLog(@"%@", self.parentViewController.venue.name);
Run Code Online (Sandbox Code Playgroud)

NSLog(@"%@", self.tabBarController.venue.name);
Run Code Online (Sandbox Code Playgroud)

但XCode给出了错误

error: request for member 'venue' in something not a structure or union
Run Code Online (Sandbox Code Playgroud)

我可以从内部访问场地属性,MainViewController所以在那里排除了错误.iPhone模拟器确实看到了两者self.parentViewControllerself.tabBarController作为一个实例MainViewController.这条线......

NSLog(@"%@", self.tabBarController);
Run Code Online (Sandbox Code Playgroud)

输出...

2009-06-05 17:54:46.502 Venue[29729:20b] <MainViewController: 0x536600>
Run Code Online (Sandbox Code Playgroud)

由于它被视为一个MainViewController实例,我怀疑使用铸造会有所帮助.我唯一的另一个选择是HomeViewController用场地的副本来初始化,或者我只是做了一些完全错误的' self.parentViewController.venue.name'?谢谢,罗布

iphone objective-c

13
推荐指数
1
解决办法
4万
查看次数

使用具有核心数据库的多个托管对象上下文

我正在使用核心数据来存储和获取我的数据,但我遇到了一些问题.我想使用两个并行线程进行以下操作:

  1. 线程1将在CoreData基表(A)中插入数据.
  2. 线程2将从另一个表(B)获取数据.

我怎么能这样做?

我对谷歌进行了一些研究,他们说,我们需要使用多个托管对象上下文,但我不知道我们将如何使用它.

iphone multithreading core-data ios

10
推荐指数
1
解决办法
8876
查看次数

iPhone上的UIImagePickerController和AVCaptureSession之间的相机差异

我正在尝试分别UIImagePickerController使用AVCaptureSessionwith AVCaptureDeviceInput和for AVCaptureStillImageOutput作为输入/输出来构建替换.

预览我正在使用的相机流AVCaptureVideoPreviewLayer.

它现在可以正常捕捉和存储照片,就像默认相机一样.

但是,我发现了3个无法解决的问题:

  • 拍摄的照片不会达​​到默认相机提供的相同质量
  • 缩短观看/捕捉角度,就像使用默认相机上的视频捕捉一样
  • 无法控制闪光灯等相机特定选项

有没有办法达到UIImagePickerController使用更可定制的方法(即AVFoundation或任何其他)的水平?

iphone camera objective-c avfoundation uiimagepickercontroller

7
推荐指数
1
解决办法
4511
查看次数