- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法正确交换存储在 IBOutletCollection 中的两个 UIImageView。从概念上讲,我一定做错了什么。
假设我有一个索引数据的 NSMutableArray 和一个索引 UIImageViews 的 NSMutableArray,我希望这两个索引数组对应,即 UIImageView 数组的第 n 个索引元素应该反射(reflect)图像中的第 n 个数据元素数组。
@property (nonatomic, strong) IBOutletCollection(MyImageView) NSMutableArray* myImages;
@property (nonatomic, strong) NSMutableArray* myData;
首先,我按 x 坐标对 IBOutletCollection 进行排序,以便屏幕上的外观是从左到右,即索引 0 的元素应该一直显示在左侧,...,所有屏幕右侧的方式。
NSComparisonResult imageSort(id label1, id label2, void* context)
{
if ([label1 frame].origin.x < [label2 frame].origin.x)
return NSOrderedAscending;
else if ([label1 frame].origin.x > [label2 frame].origin.x)
return NSOrderedDescending;
else { // Determine using y-coordinate
if ([label1 frame].origin.y < [label2 frame].origin.y)
return NSOrderedAscending;
else if ([label1 frame].origin.y > [label2 frame].origin.y)
return NSOrderedDescending;
else
return NSOrderedSame;
}
}
现在,每当我想要交换数据数组的两个成员时,我都会确保也交换它们的图像,以便每个 UIImageView 始终反射(reflect)该槽中的数据。假设我要交换的两个元素具有索引 frontIndex 和 backIndex:
// Switch state data in arrays
Data* sendToBack = myData[frontIndex];
Data* bringToFront = myData[backIndex];
myData[frontIndex] = bringToFront;
myData[backIndex] = sendToBack;
MyImageView* sendToBackImg = myImages[frontIndex];
MyImageView* bringToFrontImg = myImages[backIndex];
myImages[frontIndex] = bringToFrontImg;
myImages[backIndex] = sendToBackImg;
当我尝试设置动画或更新图像数组时出现问题。看起来,当我在索引 0 和 9 处对更新后的数组元素调用 animate 或 update 时,实际更新的 View 不是位于最左侧和左侧第 9 个的 View :它们正在新位置更新:
[myImages[frontIndex] animateInWayX]; --> this updates the on-screen view at backIndex
[myImages[backIndex] animateInWayY]; --> this updates the on-screen view at frontIndex
我检查了调试器中的数组,交换确实发生了——换句话说,myImages 数组内的 frontIndex 元素确实显示了反射(reflect) myData[frontIndex] 处模型的正确数据,因此 View 数组已正确交换,它只是显示在屏幕上的一个新位置(backIndex 的位置,好像它没有移动)。
如何解决这个问题?
最佳答案
是的,正如上面的评论者所指出的,您只是在交换指针。最好的解决方案是复制指向的内容。
// Switch state data in arrays
Data* temp = [[DataObject alloc] init];
[self copyDataFrom:bringToFront into:temp];
[self copyDataFrom:sendToBack into:myData[frontIndex]];
[self copyDataFrom:temp into:myData[backIndex]];
MyImageView* frontImg = myImages[frontIndex];
MyImageView* backImg = myImages[backIndex];
[frontImg updateUsingData:myData[frontIndex]];
[backImg updateUsingData:myData[backIndex]];
关于ios - 在 IBOutletCollection 中交换图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21596502/
我一直在使用 IBOutletCollections 将相同的行为应用于 IB 中连接的许多对象。这非常节省时间,但是单独建立 IB 中的每个对象和我的头文件中声明的 IBOutletCollecti
我在 Storyboard上有 10 个 uibutton,我已将它们与 iboutletcollections 链接起来。然后我使用循环从 uiimage 数组设置按钮背景图像。当我运行我的项目时,
我在 Storyboard上创建了 8 个不同的对象(4 对 UIImageView 和 textview)并将它们中的每一个连接到一个 IBOutletCollection,但是当我这样做时 for
我有一个疑问。请回答我这些问题。 1.为什么我们使用 IBOutletCollection 而不是 IBOutlet? 2.如果我们使用四个按钮使用IBOutletCollection,如何找到哪个按
这个问题在这里已经有了答案: Is IBOutletCollection guaranteed to be of correct order? (4 个答案) 关闭 9 年前。 这是一个非常简单的问
关于 IBOutletCollection 与 NSArray,我有两个相互矛盾的来源。首先说,将事物从界面链接到 socket 集合的顺序很重要,并且在 socket 集合中始终相同。例如。如果我们
我正在尝试在 Swift 的 iTunesU 中从“为 iphone 和 ipad 开发 ios7 应用程序”中复制 Stanford Matchismo 游戏。 第三讲77页slides ,它显示使
我在我的类中声明了 NSArray NSArray *labelsArray; 我把它变成了一个属性 @property (nonatomic,retain) IBOutlet
我正在尝试声明 IBOutletCollection。我想要做的是以一种不必逐个声明它们的方式管理多个按钮。 #import @interface WindowManager : NSObject
这是迄今为止我的代码: @IBOutlet var Boxes: [UIImageView]! @IBAction func Success(_ sender: Any) { if "" ==
我正在尝试迭代并在我的 TextView 集合中显示我的数组。 @property (strong, nonatomic) IBOutletCollection(UITextView) NSArray
我的问题是 - 如何修改 中每个标签的任何颜色,如 backgroundColor、textColor IBOutletCollection(UILabel) NSArray *smallLabels
我目前正在开发一个项目,其中 IBOutletCollection 中的每个按钮代表一副扑克牌中的一张牌。我遇到了一个问题,但当我添加所有 52 张卡时,我根据 indexOfObject 中的 in
我无法正确交换存储在 IBOutletCollection 中的两个 UIImageView。从概念上讲,我一定做错了什么。 假设我有一个索引数据的 NSMutableArray 和一个索引 UIIm
我有 30 个 UILabel,希望用作 IBOutlet。但是,当我尝试访问它们的 UILabel 属性时,我收到错误消息,提示我找不到类型为“id”的对象的属性 x。我对 Objective C
我已经创建了几个按钮的 IBOutletCollect : @property (retain, nonatomic) IBOutletCollection(UIButton) NSArray *al
我想做类似 UITabBarController 的事情。 UITabBarController 具有属性 viewControllers,我可以在 IB 中添加 UIViewController *
我有 UIImageView 的 IBOutletCollection现在我需要访问其中的图像,我该怎么做? 我只能通过这段代码访问第一个和列表 myCollection.first?.image m
Objective-C 和 iOS 开发的新手,希望能在这里得到帮助! 我写了一些这样的代码 IBOutletCollection(UILabel) NSArray *allLabels; 在 IB
我有几个 IBOutlet 并将它们与 IBOutletCollection 一起使用: @interface IBOutletCollectionViewController : UIVie
我是一名优秀的程序员,十分优秀!