小编Kao*_*ire的帖子

动画后辅助属性更新不会粘连

REPRO存储库在这里:https://github.com/kaolin/38492498/tree/master


我有一个@property int percentScanned.

我设置了needsDisplayForKey:

+ (BOOL)needsDisplayForKey:(NSString *)key {
    if ([@"percentScanned" isEqualToString:key]) {
        return YES;
    }
    return [super needsDisplayForKey:key];
}
Run Code Online (Sandbox Code Playgroud)

我的显示方法:

- (void)display {
    _percentTextLayer.string = [NSString stringWithFormat:@"%02d%%",[[self presentationLayer] percentScanned]];
}
Run Code Online (Sandbox Code Playgroud)

我的动画:

    [CATransaction begin];
    self.percentScanned = 99;
    _percentTextLayer.string=@"99%";
    [CATransaction setCompletionBlock:^{
        _percentTextLayer.string=@"99%";
        self.percentScanned = 99;
    }];
    {
        CABasicAnimation *a = [CABasicAnimation animationWithKeyPath:@"percentScanned"];
        [a setFromValue:@0];
        [a setToValue:@99];
        [a setDuration:4.];
        [self addAnimation:a forKey:@"percentage"];
    }
    [CATransaction commit];
Run Code Online (Sandbox Code Playgroud)

这一切都很好,除了在动画结束时,我的模型层字符串返回到"00%".正如你所看到的,我已经抛出,如厨房水槽迫使它留在"99%"什么感觉(外的"黑客"的animation.removedOnCompletion = NO;animation.fillMode = kCAFillModeForwards;-and实际上,添加这些并不能帮助!).

有关于一秒钟后3/30在同一层上另一个动画,淡入淡出的不透明度....但推说出来,或者删除它,似乎不有所作为. …

caanimation ios

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

将viewWillAppear推迟到webViewDidFinishLoad

我有一个UIWebViews在多个视图控制器中使用的应用程序.将UIWebViews用于呈现本地生成的HTML,不需要缓慢的网络接入.

为了节省内存,我只根据viewcontroller viewWillAppear回调的提示按需加载这些内存.(并卸载屏幕外实例以响应didReceiveMemoryWarning消息.)

问题是用户看到正在渲染的html,有时伴随着样式闪烁和其他各种令人不快的文物.我宁愿在屏幕外完成渲染,并在准备就绪时显示完全渲染的视图.

viewWillAppear在UIWebView完全呈现之前,能够不返回将是非常整洁的.但是怎么样?

UIWebView通过发送loadHTMLString:baseURL:消息告诉要呈现什么.这是异步的,并且稍后(很快)将回调webview的委托webViewDidFinishLoad.

我尝试了内部运行的runloop viewWillAppear,运行的是NSDefaultRunLoopModeUITrackingRunLoopMode.这适用于模拟器(它向日志抱怨)

在事务中调用[CATransaction synchronize]

但确实有效)但在设备上它会死锁,webViewDidFinishLoad从未被调用过.

(此外,似乎UIWebView加载属性不起作用.至少,在我调用之后loadHTMLString:baseURL:和获得回调之前,它不是真的.)

iphone uiwebview

8
推荐指数
1
解决办法
4635
查看次数

访问iOS6 UIPageViewController创建的UIPageControl?

我使用的是UIPageViewController导航设置为水平,过渡样式设置为Scroll(在InterfaceBuilder中),没有脊椎.这给了我一个可爱的UIPageControl集成.现在我希望能够切换它是否正在显示(因为它下面有艺术品).

我已经尝试设置presentationCountForPageViewControllerpresentationIndexForPageViewControllerUIPageControl应该隐藏时返回0 ,但是当我想要时,这些方法没有被调用.

暂停堆栈跟踪,我看到它们被调用[UIPageViewController _updatePageControlViaDataSourceIfNecessary]...我认为如果我尝试使用该方法,我的应用程序将被拒绝.

我应该通过子视图搜索它,还是自己滚动以便我可以控制它,还是有更好的方法来切换它的可见性?

谢谢!

uipagecontrol ios uipageviewcontroller ios6

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

captureStillImageAsynchronouslyFromConnection没有JPG中介

我试图从相机中获得尽可能好的图像,但只能找到示例,captureStillImageAsynchronouslyFromConnection然后直接进入:

NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];    
UIImage *image = [[UIImage alloc] initWithData:imageData];
Run Code Online (Sandbox Code Playgroud)

JPEG是有损的,有没有什么方法可以将数据作为PNG,甚至只是RGBA(BGRA,你有什么用?).AVCaptureStillImageOutput似乎没有任何其他NSData*方法....

实际上看着CMSampleBufferRef,它似乎已经锁定为JPEG~

formatDescription = <CMVideoFormatDescription 0xfe5e1f0 [0x3e5ac650]> {
mediaType:'vide' 
mediaSubType:'jpeg' 
mediaSpecific: {
    codecType: 'jpeg'       dimensions: 2592 x 1936 
} 
extensions: {(null)}
}
Run Code Online (Sandbox Code Playgroud)

是否有其他方法可以拍摄全分辨率照片并获取原始数据?

image-capture uiimage ios

6
推荐指数
1
解决办法
5690
查看次数

在构建库时,clang和clang ++有什么区别?

我正在使用clang编译ac库(由c ++项目使用).在尝试链接此库时,我收到了链接器错误(特别是关于hqxInit函数的未定义符号).当我切换到clang ++时,它可以工作.用nm检查,clang ++进一步说明这些名字.发生了什么 - 有没有更好的方法告诉链接器一个库是munged-for-c而不是munged-for-c ++?用c ++构建ac库似乎很愚蠢....

//用clang构建

$ nm libhqx.a

libhqx.bak(init.c.o)
04000000 C _RGBtoYUV
00000004 C _YUV1
00000004 C _YUV2
00000000 T _hqxInit
Run Code Online (Sandbox Code Playgroud)

//用clang ++构建

$ nm libhqx.a 

libhqx.a(init.o):
00000100 S _RGBtoYUV
04000100 S _YUV1
04000104 S _YUV2
00000000 T __Z7hqxInitv
Run Code Online (Sandbox Code Playgroud)

linker clang clang++

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

opencv框架的iOS错误

我正在尝试为Xcode构建opencv框架.我是Mac世界和opencv的新手.我按照给出的说明进行操作

http://docs.opencv.org/doc/tutorials/introduction/ios_install/ios_install.html

我克隆了存储库(opencv 2.4.7),然后尝试运行python脚本 - 根据链接上的说明

python opencv/platforms/ios/build_framework.py ios

我得到以下错误,有人可以帮忙吗?我使用的是OSX 10.8.5

Applications/gebos_third_party_apps/opencv/3rdparty/zlib/gzwrite.c:84:15:
Run Code Online (Sandbox Code Playgroud)

注意:你的意思是'fwrite'吗?got = write(state-> fd,strm-> next_in,strm-> avail_in); ^ ~~~~ fwrite包含在/Applications/gebos_third_party_apps/opencv/3rdparty/zlib/gzwrite.c:6中的文件:/Applications/gebos_third_party_apps/opencv/3rdparty/zlib/gzguts.h:21中包含的文件:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/usr/include/stdio.h:252:9:
Run Code Online (Sandbox Code Playgroud)

注意:'fwrite'在这里声明size_t fwrite(const void*__restrict,size_t,size_t,FILE*__restrict)__DARWIN_ALIAS(fwrite); ^ /Applications/gebos_third_party_apps/opencv/3rdparty/zlib/gzwrite.c:573:9:错误:函数'close'的隐式声明在C99中无效[-Werror,-Wimplicit-function-declaration] if(close- state- state- > fd)== -1)生成^ 2错误.

** INSTALL FAILED **

The following build commands failed: CompileC /Applications/gebos_third_party_apps/ios/build/iPhoneSimulator-x86_64/3rdparty/zlib/OpenCV.build/Release-iphonesimulator/zlib.build/Objects-normal/x86_64/gzwrite.o
Run Code Online (Sandbox Code Playgroud)

3rdparty/zlib/gzwrite.c normal x86_64 c com.apple.compilers.llvm.clang.1_0.compiler CompileC /Applications/gebos_third_party_apps/ios/build/iPhoneSimulator-x86_64/3rdparty/zlib/OpenCV.build/Release-iphonesimulator/zlib .build/Objects-normal/x86_64/gzlib.o 3rdparty/zlib/gzlib.c normal x86_64 c com.apple.compilers.llvm.clang.1_0.compiler CompileC/Applications/gebos_third_party_apps/ios/build/iPhoneSimulator-x86_64/3rdparty /zlib/OpenCV.build/Release-iphonesimulator/zlib.build/Objects-normal/x86_64/gzread.o 3rdparty/zlib/gzread.c normal x86_64 c com.apple.compilers.llvm.clang.1_0.compiler(3次失败)Traceback(最近调用最后一次):文件"opencv-lib/opencv/platforms/ios/build_framework.py",第112行,在build_framework中(os.path.abspath(os.path.join(os.path.dirname( sys.argv [0]),"../ ..")),os.path.abspath(sys.argv [1]))文件"opencv-lib/opencv/platforms/ios/build_framework.py",行104,在build_framework中put_framework_together(srcroot,dstroot)文件"opencv-lib/opencv/platforms/ios/build _framework.py",第80行,在put_framework_together shutil.copytree(tdir0 +"/ install/include/opencv2",dstdir +"/ Headers")文件"/System/Library/Frameworks/Python.framework/Versions/2.7/lib /python2.7/shutil.py",第168行,在copytree名称= os.listdir(src)OSError:[Errno 2]没有这样的文件或目录:'../build/iPhoneOS-arm64/install/include/opencv2 "

c++ opencv ios

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

presentationLayer值在动画期间不更新?

答案很可能是我不能按照我想要的方式混合东西,我会接受"正确的方法"来混合东西(可能是一个更复杂的CAAnimation?我不知道).是)我有的:

__block BOOL animationComplete = FALSE;
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationCurveEaseInOut
    animations:^{
        [self setFrame:destRect];
    }
    completion:^(BOOL finished) {
        animationComplete = YES;
        [[UIApplication sharedApplication] endIgnoringInteractionEvents];
    }];
Run Code Online (Sandbox Code Playgroud)

然后用以下方式对其进行轮询:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, (unsigned long)NULL), ^{
    while (!animationComplete) {
        CALayer *layer = self.layer.presentationLayer;
        CGRect frame = [layer frame];
        CGPoint point = [layer position];
        float currentTranslation = [[layer valueForKeyPath:@"transform.translation.x"] floatValue];
        NSLog(@"%.1f : %.1f : %.1f : %.1f : %.1f : %.1f",frame.origin.x, currentTranslation, frame.origin.x, layer.bounds.origin.x, layer.position.x, point.x);
    }
});
Run Code Online (Sandbox Code Playgroud)

我抓错了队列吗?错误的参数?我在看错了一层吗?以上是我试过看的值的散射,在动画期间都是不变的....

214.4 : 0.0 : 214.4 : …
Run Code Online (Sandbox Code Playgroud)

iphone core-animation grand-central-dispatch ios

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