小编Sea*_*Lee的帖子

防止UITableviewcell在重新排序期间变得透明

我试图在重新排序动画期间保持我的uitableviewcells不透明 - 原因是我在一个视图中自定义绘制单元格以增强滚动性能,但这样做会显着减慢重新排序动画.

知道怎么做到这一点?

transparent uitableview

16
推荐指数
2
解决办法
3181
查看次数

当子关系实体在核心数据中更改时通知父实体

当其中任何一个关系对象发生变化时,是否可以在父实体中接收回调或通知?当实体的属性发生变化时,这很有用.以下方法......

- (void)didChangeValueForKey:(NSString *)key

在我的Entity子类上调用.但是,当其中一个关系中的属性发生更改时,不会调用此方法.

我正在尝试做的是当我的父实体的任何一个属性或关系对象发生更改时更新timeStamp属性.

entity-relationship core-data ios

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

识别后使UIGestureRecognizer失败的方法?

我有一个看似基本的问题,但无法弄明白.

基本问题是:如何以编程方式将一个手势识别器从处理程序置于失败状态,而它位于UIGestureRecognizerStateBegan或UIGestureRecognizerStateChanged?

更详细的解释:我在UIScrollView中有一个用于UIView的长按手势识别器.我做了

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

因为否则一旦用户将手指放在视图中,我就无法滚动滚动视图.这是基本的触摸,如safari,你在一个链接上按住手指,突出链接,但向上或向下滚动 - 然后链接没有突出显示和滚动视图移动.

我现在可以正常工作,因为这两个手势都被识别了,但如果我能检测到长按手势识别器的StateChanged中的移动会更好,如果它超过20像素左右,只需以编程方式使longpress失败.

这可能吗?还是我在错误的地方挖掘?

uiscrollview uigesturerecognizer ios

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

修改完成处理程序中的可变对象

我有一个关于Apple的以下代码示例的线程安全性的问题(来自GameKit编程指南)

这是从游戏中心加载成就并在本地保存:

步骤1)将一个可变字典属性添加到报告成就的类中.该词典存储成就对象的集合.

@property(nonatomic, retain) NSMutableDictionary *achievementsDictionary;
Run Code Online (Sandbox Code Playgroud)

步骤2)初始化成就字典.

achievementsDictionary = [[NSMutableDictionary alloc] init];
Run Code Online (Sandbox Code Playgroud)

步骤3)修改加载加载成就数据的代码,将成就对象添加到字典中.

{
    [GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error)
        {
            if (error == nil)
            {
                for (GKAchievement* achievement in achievements)
                    [achievementsDictionary setObject: achievement forKey: achievement.identifier];
            }
        }];
Run Code Online (Sandbox Code Playgroud)

我的问题如下 - achievementDictionary对象正在完成处理程序中被修改,没有任何排序锁.这是否允许,因为完成处理程序是一个工作块,iOS将保证在主线程上作为单元执行?并且永远不会遇到线程安全问题?

在另一个Apple示例代码(GKTapper)中,此部分的处理方式不同:

@property (retain) NSMutableDictionary* earnedAchievementCache; // note this is atomic
Run Code Online (Sandbox Code Playgroud)

然后在处理程序中:

[GKAchievement loadAchievementsWithCompletionHandler: ^(NSArray *scores, NSError *error)
        {
            if(error == NULL)
            {
                NSMutableDictionary* tempCache= [NSMutableDictionary dictionaryWithCapacity: [scores count]];
                for (GKAchievement* score in scores)
                {
                    [tempCache setObject: score forKey: score.identifier]; …
Run Code Online (Sandbox Code Playgroud)

thread-safety gamekit ios objective-c-blocks

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