小编Eri*_*k S的帖子

在UITableView中检测水平平移

我正在使用UIPanGestureRecognizer来识别UITableView中的水平滑动(准确地说在单元格上,尽管它被添加到表本身).然而,这个手势识别器显然从表中窃取了触摸.我已经有了pangesturerecognizer来识别水平滑动,然后对齐; 但是如果用户通过垂直滑动开始,它应该将该触摸的所有事件传递给tableview.

我尝试过的一件事是禁用识别器,但它不会滚动直到下一个触摸事件.所以我需要它立即通过该活动.

我尝试的另一件事就是让它自己滚动,但是在停止触摸后你会错过持久的速度.

下面是一些代码:

//In the viewdidload method
UIPanGestureRecognizer *slideRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(sliding:)];
[myTable addGestureRecognizer:slideRecognizer];



-(void)sliding:(UIPanGestureRecognizer *)recognizer
{
    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
    CGPoint translation = [recognizer translationInView:favoritesTable];
    if (sqrt(translation.x*translation.x)/sqrt(translation.y*translation.y)>1) {
        horizontalScrolling = YES; //BOOL declared in the header file
        NSLog(@"horizontal");
        //And some code to determine what cell is being scrolled:
        CGPoint slideLocation = [recognizer locationInView:myTable];
        slidingCell = [myTable indexPathForRowAtPoint:slideLocation];
        if (slidingCell.row == 0) {
            slidingCell = nil;
        }

    }
    else
    {
        NSLog(@"cancel");
    }

    if (recognizer.state == UIGestureRecognizerStateEnded …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c uitableview uigesturerecognizer

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

使用GCD进行读写锁定

我的应用程序大量使用GCD,几乎所有内容都分散在由调度处理的小任务中.但是,基础数据模型主要是读取的,只是偶尔写入.

我目前使用锁来防止在阅读时更改关键数据结构.但是在今天看了一些锁之后,我发现了NSConditionLock和一些关于读写锁的页面.后者正是我所需要的.

我找到了这个实现:http://cocoaheads.byu.edu/wiki/locks.我的问题是,这个实现是否适用于GCD,看到它使用PThreads?

iphone multithreading locking objective-c grand-central-dispatch

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

使用`rand()`和`having`

我有一个包含记录列表的表.每次迭代时,必须从特定偏移量开始随机选择这些迭代.每行都有机会被挑选(因此,例如新的或不经常挑选的行被挑选更多).

但是,某些东西不起作用,导致返回的行不满足使用别名的条件rand().

我正在尝试使用以下查询:

select
    id,
    probability,
    rand() rolledChance
from records
where id > :offset
having rolledChance < probability;
Run Code Online (Sandbox Code Playgroud)

其中:offset是预准备语句参数,并且是此用户上次迭代中的最后一次扫描ID.

在这样创建的表上(这是表的相关子集):

CREATE TABLE records (id INT, probability FLOAT);
Run Code Online (Sandbox Code Playgroud)

其中概率是表中0到1之间的值records.但是,这会返回条件不满足的行.我用以下查询检查了这个:

select
    *,
    x.rolledChance < x.probability shouldPick
from
    (select
        id,
        probability,
        rand() rolledChance
    from records
    having rolledChance < probability
) x;
Run Code Online (Sandbox Code Playgroud)

返回的几行是:

id      probability     rolledChance            shouldPick
12      0.546358        0.015139976530466207    1
26      0.877424        0.9730734508233829      0
46      0.954425        0.35213605347288407     1
Run Code Online (Sandbox Code Playgroud)

当我按如下方式重新调整第二个查询时,它按预期工作,只返回rolledChance实际低于的行probability:

select
    *, …
Run Code Online (Sandbox Code Playgroud)

mysql mariadb

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

绘制粒子

我的应用程序的一部分显示了一个风景,但它现在有点无聊.因此,我打算在屏幕上制作一些粒子的动画(想想像小翅膀的东西 - http://www.youtube.com/watch?v=DpmcX-rWGfs).但是,我还没有找到任何内置的粒子系统; 我怎样才能有效记忆?我已经使用CADisplayLink实现了我自己的动画系统,可以让一些云在景观上动画,而且它有点迟钝(尽管我希望很快就能让它更快).另一个非常重的系统,比如我想一次动画20个小点,可能会破坏它.

iphone core-animation objective-c particles

9
推荐指数
1
解决办法
2048
查看次数

PHP中的空行(CodeIgniter)文件下载

在我的基于CodeIgniter的站点(成员管理系统)上,有创建直接借记文件的功能.这些是通过设置标题来下载的,如下所述:http://www.richnetapps.com/the-right-way-to-handle-file-downloads-in-php/.但是,由于某种原因,在我自己的输出之前总是输出一个空行.我已经尝试替换我返回的字符串中的所有换行但没有成功.输出是一个XML文件,由于这个空行,我的银行不接受该文件作为有效的XML.

我已经发现帖子说这可能是因为PHP在当前文件之前关闭了文件中的标签.这可能是原因,但是加载了几个第三方库,如果您仍然希望保留更新库的选项,则可以撤消手动删除每个文件中所有关闭的PHP标记.似乎特别是Smarty喜欢这些结束标签.

直接访问文件本身也不是一个选项,因为默认情况下CodeIgniter不允许这样做,并且因为这种方法存在相当大的安全问题(公共可访问的文件中包含银行帐户详细信息是一个很大的禁忌).

因此,我来​​找你:你知道另一个可能解决这个问题的方法吗?

编辑:这是用于下载的代码.

function incasso_archive($creditor, $date, $time, $extension)
{
    $date = str_replace("_", "-", $date);

    $fn = $this->incasso->incasso_file($creditor, $date, $time, $extension);

    $contents = file_get_contents($fn);
    $name = "Incasso $date.$extension";

    header('Content-Type: application/octet-stream');
    header('Content-Transfer-Encoding: Binary');
    header('Content-disposition: attachment; filename="'.$name.'"');
    echo $contents;
}
Run Code Online (Sandbox Code Playgroud)

php codeigniter download

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

更改正在进行的动画

基本上,我想要做的是为云动画,然后在风变化时改变动画中的速度和/或方向.如果重要的是,我从UIViewController控制整个事情,云存在一个UIView,其上面有一个CALayer,这就是云本身.我也尝试过UIImageView.

对于TL:DR类型,简而言之,我要做的是获取动画视图的位置,或使用块动画停止动画视图.

这是完整的故事.我的问题是在动画期间获得它的位置.我正在使用块动画.因为我只知道它应该移动的速度,我需要通过使用距离来计算自己的时间.我尝试了以下代码,以及它的几个变体:

[[Cloud CloudImage]convertPoint:CGPointMake([[[Cloud CloudImage] presentationLayer] position].x, 0) toLayer:self.layer].x
Run Code Online (Sandbox Code Playgroud)

Cloud是UIView,CloudImage是CALayer.这是我尝试过的最复杂的变化,我尝试了各种更简单的变体(例如,直接询问云,或者使用UIView而不是CALayer).但是,它返回的只是它的最终值.我读了一些关于这个方法从3.2中被破坏的东西,但在4.2中被修复了; 但是,当我将部署目标更改为iOS 4.3而不是4.0时,它没有修复.我正在使用4.3 base sdk.

我考虑的一些其他变化是暂时停止动画片刻,然后立即获得位置并开始新动画.但是,我需要知道一种在其轨道中停止基于块的动画的方法,并且我只找到了旧动画系统的片段(commitanimations).

我考虑的最后一个是编写自己的动画系统; 云将在0.08秒左右重复NSTimer,并在每次触发时创建0.08秒的核心动画,为此它使用给予云的速度作为属性.但是,我担心这种情况的任何变化都会有更低的性能,而我需要它尽可能轻,因为我同时有多达20个这样的云(有时也有雨).

提前致谢!

iphone xcode core-animation objective-c ios

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

没有calltrace(使用ARC)的过度释放,主要的错误访问

我最近转换为使用ARC.但是,我现在有一个奇怪的崩溃,而且崩溃日志真的没有用.在我的一个应用程序初始化过程中(从服务器获取数据,解析它,设置视图),我得到一个bad_access.这是设备的错误日志:

    Incident Identifier: 7CE05452-7C5D-424A-8529-AE7B17C9FEBC
CrashReporter Key:   b743ede30ce737293cf7444f67bb8a7b590c2fd9
Hardware Model:      iPhone3,1
Process:         BoreBeta [231]
Path:            /var/mobile/Applications/52A15437-459A-4160-95C4-BF5DF5C98C15/BoreBeta.app/BoreBeta
Identifier:      BoreBeta
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2011-08-18 14:53:41.800 +0200
OS Version:      iPhone OS 5.0 (9A5288d)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x80000004
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   CoreFoundation                  0x3758e380 CFRelease + 28
1   CoreFoundation                  0x375a93ec -[__NSArrayM dealloc] + 116
2   libobjc.A.dylib                 0x30a4e0be _objc_rootRelease + …
Run Code Online (Sandbox Code Playgroud)

iphone xcode objective-c automatic-ref-counting

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

主线程上的多个GCD调度

我正在尝试加速我的应用程序的启动,我的一个想法是使用异步调度队列.我有2个任务可以在启动时彼此相邻运行(实际上是非常大的任务).但是,它们都有一个在主线程上运行的重要部分(主要是UI代码).

dispatch_async(dispatch_get_main_queue, ^{
    [self doTask1];
});

dispatch_async(dispatch_get_main_queue, ^{
    [self doTask2];
    //Will task 2 take turns with task 1, or will task 2 start after 1 is finished?
});
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果我在启动时调用2个dispatch_async,就像在这个例子中一样,它们会轮流执行,还是先完成第一个块,然后执行第二个块?

iphone multithreading objective-c grand-central-dispatch ios

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

获取谷歌地图的图像

我正在尝试获取一张谷歌地图的快照.但是,mapkit似乎没有类似的功能.有没有办法在不违反Google协议的情况下获取谷歌地图的一部分图像文件?

PS拍摄iphone的屏幕截图不是一个选项,因为我可能需要一个主要在屏幕外的部分的快照.

iphone cocoa-touch google-maps objective-c mapkit

0
推荐指数
1
解决办法
1502
查看次数